[BZOJ2683]简单题(cdq分治)
2017-02-10 16:50
316 查看
题目描述
传送门题解
同BZOJ1176代码
#include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cmath> using namespace std; #define N 1000005 int n,T,cnt,x,y,p,q,v,opt,acnt,bcnt,pa,pb,tot; int C ,ans ; struct data{int x,y,v,ty,id;}opr ,a ,b ,ch ; bool flag ; int cmp(data a,data b) { return a.x<b.x; } void add(int loc,int val) { if (!loc) return; for (int i=loc;i<=n;i+=i&-i) C[i]+=val; } int query(int loc) { int ans=0; for (int i=loc;i>=1;i-=i&-i) ans+=C[i]; return ans; } void cdq(int l,int r) { if (l>=r) return; int mid=(l+r)>>1; cdq(l,mid); acnt=0; for (int i=l;i<=mid;++i) a[++acnt]=opr[i]; sort(a+1,a+acnt+1,cmp); bcnt=0; for (int i=mid+1;i<=r;++i) b[++bcnt]=opr[i]; sort(b+1,b+bcnt+1,cmp); pa=pb=1;tot=0; while (pb<=bcnt) { while (pa<=acnt&&a[pa].x<=b[pb].x) { if (!a[pa].ty) { add(a[pa].y,a[pa].v); ch[++tot].x=a[pa].y,ch[tot].v=a[pa].v; } ++pa; } ans[b[pb].id]+=query(b[pb].y)*b[pb].ty; ++pb; } for (int i=1;i<=tot;++i) add(ch[i].x,-ch[i].v); cdq(mid+1,r); } int main() { scanf("%d",&n); while (~scanf("%d",&opt)) { ++T; if (opt==3) break; if (opt==1) { scanf("%d%d%d",&x,&y,&v); opr[++cnt].x=x,opr[cnt].y=y,opr[cnt].ty=0,opr[cnt].v=v,opr[cnt].id=T; } else { flag[T]=1; scanf("%d%d%d%d",&x,&y,&p,&q); opr[++cnt].x=x-1,opr[cnt].y=y-1,opr[cnt].ty=1,opr[cnt].id=T; opr[++cnt].x=p,opr[cnt].y=q,opr[cnt].ty=1,opr[cnt].id=T; opr[++cnt].x=p,opr[cnt].y=y-1,opr[cnt].ty=-1,opr[cnt].id=T; opr[++cnt].x=x-1,opr[cnt].y=q,opr[cnt].ty=-1,opr[cnt].id=T; } } cdq(1,cnt); for (int i=1;i<=T;++i) if (flag[i]) printf("%d\n",ans[i]); return 0; }
相关文章推荐
- 代码描述的Android AIDL示例 - IPC
- Java 简述对象克隆(复制)
- java中exception的printStackTrace()输出内容转成字符串
- 4.使用DShow采集摄像头图像和麦克风声音到本地(摄像头录制)
- zip4j -- Java处理zip压缩文件的完整解决方案
- 13.6.1
- mongo学习
- Android Wear 之 WearableListView
- UVA 11082 Matrix Decompressing(最大流)
- HALCON学习一(Halcon函数)
- ELASTIC 5.2部署并收集nginx日志
- JS和${}的一些问题
- linux下将c++编译成so,调用该so文件
- MySql多行数据合并成一行,将字段中的值拼接在一起
- react native安装过程遇到的问题
- 国外程序员整理的Java资源大全
- ES6常用新特性总结
- 为什么老板利用激励提升在客户现场工作员工的生产力,反而可能降低对客户的价值?
- JAVA--基本数据类型
- VS平台简单的使用C++调用Python3.5的方法