博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1303: [CQOI2009]中位数图 问题转化_扫描_思维
阅读量:4605 次
发布时间:2019-06-09

本文共 1162 字,大约阅读时间需要 3 分钟。

将比 b 大的设成 1,比 b 小的设成 -1,开个桶左右扫描一下,乘法原理乘一乘就好了。

虽然一眼切,不过这个基于中位数的转化还是相当重要的。middle 那个主席树的题也需要该做法

Code:

#include 
#define setIO(s) freopen(s".in","r",stdin) #define maxn 1000000 using namespace std;int arr[maxn],neg1[maxn],pos1[maxn],neg2[maxn],pos2[maxn],cur=0,zero1,zero2; int main(){ // setIO("input"); int n,k; long long ans = 1; scanf("%d%d",&n,&k); for(int i = 1,a;i <= n; ++i) { scanf("%d",&a),arr[i]=(a
= 1) { for(int i = cur-1,tot=0;i>=1;--i) { tot+=arr[i]; if(tot > 0) ++pos1[tot]; if(tot < 0) ++neg1[-tot]; if(tot==0) ++ans,++zero1; } } if(cur <= n) { for(int i = cur+1,tot=0;i<=n;++i) { tot+=arr[i]; if(tot > 0) ++pos2[tot]; if(tot < 0) ++neg2[-tot]; if(tot == 0) ++ans, ++zero2; } } ans += (long long)zero1*zero2; for(int i = 1;i <= n; ++i) { ans += (long long)pos1[i]*neg2[i]; ans += (long long)neg1[i]*pos2[i]; } printf("%lld",ans); return 0; }

  

转载于:https://www.cnblogs.com/guangheli/p/10942267.html

你可能感兴趣的文章
修改上一篇文章的node.js代码,支持默认页及支持中文
查看>>
java只能的round,ceil,floor方法的使用
查看>>
将txt文件转化为json进行操作
查看>>
我的2014-相对奢侈的生活
查看>>
Java设计模式
查看>>
mysql-This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME 错误解决
查看>>
基本概念复习
查看>>
红黑树
查看>>
【数据库】
查看>>
WindowManager.LayoutParams 详解
查看>>
安卓中数据库的搭建与使用
查看>>
.NET 设计规范--.NET约定、惯用法与模式-2.框架设计基础
查看>>
sql 内联,左联,右联,全联
查看>>
C++关于字符串的处理
查看>>
Breaking parallel loops in .NET C# using the Stop method z
查看>>
[轉]redis;mongodb;memcache三者的性能比較
查看>>
让你的WPF程序在Win7下呈现Win8风格主题
查看>>
构建Docker Compose服务堆栈
查看>>
浮点数内存如何存储的
查看>>
JsonCpp 的使用
查看>>