BZOJ 2683: 简单题(CDQ 分治)
题面
Time Limit: 50 Sec Memory Limit: 128 MB
Description
命令 |
参数限制 |
内容 |
1 x y A |
1<=x,y<=N,A是正整数 |
将格子x,y里的数字加上A |
2 x1 y1 x2 y2 |
1<=x1<= x2<=N 1<=y1<= y2<=N |
输出x1 y1 x2 y2这个矩形内的数字和 |
3 |
无 |
终止程序 |
Input
Output
Sample Input
1 2 3 3
2 1 1 3 3
1 2 2 2
2 2 2 3 4
3
Sample Output
5
HINT
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<cstdlib>using namespace std; const int MAXN = 500005; typedef long long LL;inline int rd(){int x=0,f=1;char ch=getchar();while(!isdigit(ch)) {f=ch=='-'?0:1;ch=getchar();}while(isdigit(ch)) {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return f?x:-x; }int n,cnt,Num; LL f[MAXN],ans[MAXN];struct Query{int x,y,type;int val,id,num;friend bool operator<(const Query A,const Query B){if(A.x!=B.x) return A.x<B.x;if(A.y!=B.y) return A.y<B.y;return A.type<B.type; } }q[MAXN<<2],tmp[MAXN<<2];void add(int x,int y){for(;x<=n;x+=x&-x) f[x]+=y; }LL sum(int x){LL ret=0;for(;x;x-=x&-x) ret+=f[x];return ret; }void Clear(int x){for(;x<=n;x+=x&-x) f[x]=0; }void cdq(int l,int r){if(l==r) return;int mid=l+r>>1;cdq(l,mid);cdq(mid+1,r);int L=l,R=mid+1,o=0;while(L<=mid && R<=r) {if(q[L]<q[R]) {if(q[L].type==1) add(q[L].y,q[L].val);tmp[++o]=q[L++];} else{if(q[R].type==2) ans[q[R].num]+=q[R].val*sum(q[R].y);tmp[++o]=q[R++];} }while(L<=mid) tmp[++o]=q[L++];while(R<=r) {if(q[R].type==2) ans[q[R].num]+=q[R].val*sum(q[R].y);tmp[++o]=q[R++];}for(register int i=l;i<=mid;i++) if(q[i].type==1) Clear(q[i].y); for(register int i=1;i<=o;i++) q[i+l-1]=tmp[i]; }int main(){n=rd();int op,x1,x2,y1,y2;while(1){op=rd();if(op==3) break;if(op==1) {q[++cnt].type=op;q[cnt].x=rd();q[cnt].y=rd();q[cnt].val=rd();q[cnt].id=cnt;}else{x1=rd(),y1=rd(),x2=rd(),y2=rd();q[++cnt].type=op;q[cnt].x=x1-1;q[cnt].y=y1-1;q[cnt].val=1;q[cnt].id=cnt;q[cnt].num=++Num;q[++cnt].type=op;q[cnt].x=x1-1;q[cnt].y=y2;q[cnt].val=-1;q[cnt].id=cnt;q[cnt].num=Num;q[++cnt].type=op;q[cnt].x=x2;q[cnt].y=y1-1;q[cnt].val=-1;q[cnt].id=cnt;q[cnt].num=Num;q[++cnt].type=op;q[cnt].x=x2;q[cnt].y=y2;q[cnt].val=1;q[cnt].id=cnt;q[cnt].num=Num;}} // cout<<cnt<<endl; // for(int i=1;i<=cnt;i++) // cout<<q[i].type<<" "<<q[i].x<<" "<<q[i].y<<" "<<q[i].val<<" "<<q[i].id<<" "<<q[i].num<<endl;cdq(1,cnt);for(int i=1;i<=Num;i++) printf("%lld\n",ans[i]);return 0; }
View Code
转载于:https://www.cnblogs.com/sdfzsyq/p/9696336.html
BZOJ 2683: 简单题(CDQ 分治)相关推荐
- Bzoj 2683: 简单题(CDQ分治)
2683: 简单题 Time Limit: 50 Sec Memory Limit: 20M. Description 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两 ...
- cdq分治(bzoj 1176: [Balkan2007]Mokia bzoj 2683: 简单题)
CDQ分治: 本质:对询问进行分治 优点:和莫队分块一样都属于技巧,关键时刻能免去复杂的数据结构,常数小 缺点:必须离线 参考:http://blog.csdn.net/hbhcy98/article ...
- BZOJ 4066: 简单题
4066: 简单题 Time Limit: 50 Sec Memory Limit: 20 MB Submit: 2373 Solved: 622 [Submit][Status][Discuss ...
- bzoj 3262: 陌上花开(cdq分治)
3262: 陌上花开 Time Limit: 20 Sec Memory Limit: 256 MB Submit: 2433 Solved: 1087 [Submit][Status][Disc ...
- 简单入门CDQ分治(很有意思的算法)
最近因为牛客暑期多校的一道题涉及到了CDQ分治,于是便去学习了一下CDQ分治. CDQ分治是以曾经的IOI选手陈丹琦命名的一种强大的算法,主要用于解决偏序问题,通过对一维进行排序(在这里说的总维度为二 ...
- BZOJ 1176: [Balkan2007]Mokia( CDQ分治 + 树状数组 )
考虑cdq分治, 对于[l, r)递归[l, m), [m, r); 然后计算[l, m)的操作对[m, r)中询问的影响就可以了. 具体就是差分答案+排序+离散化然后树状数组维护.操作数为M的话时间 ...
- bzoj 4237: 稻草人(CDQ分治+单调栈+二分)
4237: 稻草人 Time Limit: 40 Sec Memory Limit: 256 MB Submit: 1352 Solved: 594 [Submit][Status][Discus ...
- BZOJ 3687 简单题
3687: 简单题 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1073 Solved: 518 [Submit][Status][Discus ...
- BZOJ 2961 共点圆 CDQ分治+凸包
题目大意:给定平面,多次插入点和圆,每次插入点时询问当前插入的点是否在之前插入的所有圆中并且至少在一个圆中 直接用数据结构维护这些点和圆不是很好写,我们考虑CDQ分治 对于每层分治,我们需要对于[mi ...
- bzoj 3687: 简单题
2333,昨天模拟赛第一题死都想不出怎么优化tarjan,然而正解是一个kora***什么什么的东西,就是正反两遍dfs,然后这个算法求强联通分量的话,是可以用bitset来优化一下的(只考虑点). ...
最新文章
- [转载] 中华典故故事(孙刚)——21 正月剪头死舅舅
- 行添加DataGridView导出Excel的数据表格
- 数据结构--单链表single linked list数据结构C++实现
- 信息学奥赛一本通 1924:【03NOIP普及组】栈 | 洛谷 P1044 [NOIP2003 普及组] 栈
- 【敏感度,查询,裁剪代码实现】差分隐私代码实现系列(六)
- python、java大作战,python测试dubbo接口
- jsTree工作笔记001---jsTree的基本使用_js实现树形结构
- redis keys 模糊匹配_别找了,你要的Redis命令都在这了
- C/C++ 解决sizeof求结构体大小(结构体内存对齐)
- 详解大小额支付与超级网银
- mathtype中如何添加一个圆圈中间一个减号的符号
- [Client]前端代码规范 及 最佳实践
- 对称数(自己的算法)
- php9宫格抽奖程序_PHP实现抽奖功能实例代码
- Sql server日志
- Vue知识点整理(三)- Vue脚手架(1)- 初始化Vue脚手架、简单分析Vue脚手架结构
- C++实用案例:整数四则运算计算器
- 系统试运行报告是谁写的_费控系统项目实施情况说明
- 多光谱影像融合--SSVR融合
- 【机器学习】支持向量机(Suport Vector Machine)数学推导