2683: 简单题
Time Limit: 50 Sec Memory Limit: 20M.
Description
你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作:
命令
参数限制
内容
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
输入文件第一行一个正整数N。
接下来每行一个操作。
Output
对于每个2操作,输出一个对应的答案。
Sample Input
4
1 2 3 3
2 1 1 3 3
1 2 2 2
2 2 2 3 4
3
Sample Output
3
5
HINT
1<=N<=500000,操作数不超过200000个,内存限制20M。
对于100%的数据,操作1中的A不超过2000。
Source

/*
CDQ分治.
这题二维数据结构卡内存(CDQ分治基础题.
将x坐标排序,然后树状数组维护y坐标.
然后按照时间分治.
考虑贡献的影响.
推荐2013年集训队作业中许昊然的论文%%%.
*/
#include<cstdio>
#include<algorithm>
#include<cstring>
#define MAXN 500001
#define MAXM 200001
using namespace std;
int n,s[MAXN],tot,ans[MAXM*4];
struct data{int x,y,t,o,p,be;}q[MAXM*4],tmp[MAXM*4];
int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();return x*f;
}
void add(int x,int z)
{while(x<=n) s[x]+=z,x+=x&-x;return ;
}
int getsum(int x)
{int sum=0;while(x>0) sum+=s[x],x-=x&-x;return sum;
}
bool cmp(const data &x,const data &y)
{if(x.x==y.x&&x.y==y.y) return x.p<y.p;if(x.x==y.x) return x.y<y.y;return x.x<y.x;
}
void slove(int l,int r)
{if(l==r) return ;int mid=(l+r)>>1;for(int i=l;i<=r;i++){if(q[i].t<=mid&&q[i].p==1) add(q[i].y,q[i].o);else if(q[i].t>mid&&q[i].p==2){ans[q[i].be]+=getsum(q[i].y)*q[i].o;}}for(int i=l;i<=r;i++)if(q[i].t<=mid&&q[i].p==1) add(q[i].y,-q[i].o);int ll=l,rr=mid+1;for(int i=l;i<=r;i++){if(q[i].t<=mid) tmp[ll++]=q[i];else tmp[rr++]=q[i];}for(int i=l;i<=r;i++) q[i]=tmp[i];slove(l,mid),slove(mid+1,r);return ;
}
int main()
{n=read();int z,x1,y1,x2,y2,k,t=0;while(true){z=read();if(z==1){x1=read(),y1=read(),k=read();q[++tot].x=x1,q[tot].y=y1,q[tot].o=k,q[tot].p=1,q[tot].t=tot;}else if(z==2){x1=read(),y1=read(),x2=read(),y2=read();q[++tot].x=x1-1,q[tot].y=y1-1,q[tot].o=1,q[tot].p=2,q[tot].t=tot,q[tot].be=++t;q[++tot].x=x1-1,q[tot].y=y2,q[tot].o=-1,q[tot].p=2,q[tot].t=tot,q[tot].be=t;q[++tot].x=x2,q[tot].y=y1-1,q[tot].o=-1,q[tot].p=2,q[tot].t=tot,q[tot].be=t;q[++tot].x=x2,q[tot].y=y2,q[tot].o=1,q[tot].p=2,q[tot].t=tot,q[tot].be=t;}else break;}sort(q+1,q+tot+1,cmp);slove(1,tot);for(int i=1;i<=t;i++) printf("%d\n",ans[i]);return 0;
}

转载于:https://www.cnblogs.com/nancheng58/p/10068071.html

Bzoj 2683: 简单题(CDQ分治)相关推荐

  1. cdq分治(bzoj 1176: [Balkan2007]Mokia bzoj 2683: 简单题)

    CDQ分治: 本质:对询问进行分治 优点:和莫队分块一样都属于技巧,关键时刻能免去复杂的数据结构,常数小 缺点:必须离线 参考:http://blog.csdn.net/hbhcy98/article ...

  2. BZOJ 4066: 简单题

    4066: 简单题 Time Limit: 50 Sec  Memory Limit: 20 MB Submit: 2373  Solved: 622 [Submit][Status][Discuss ...

  3. bzoj 3262: 陌上花开(cdq分治)

    3262: 陌上花开 Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 2433  Solved: 1087 [Submit][Status][Disc ...

  4. 简单入门CDQ分治(很有意思的算法)

    最近因为牛客暑期多校的一道题涉及到了CDQ分治,于是便去学习了一下CDQ分治. CDQ分治是以曾经的IOI选手陈丹琦命名的一种强大的算法,主要用于解决偏序问题,通过对一维进行排序(在这里说的总维度为二 ...

  5. BZOJ 1176: [Balkan2007]Mokia( CDQ分治 + 树状数组 )

    考虑cdq分治, 对于[l, r)递归[l, m), [m, r); 然后计算[l, m)的操作对[m, r)中询问的影响就可以了. 具体就是差分答案+排序+离散化然后树状数组维护.操作数为M的话时间 ...

  6. bzoj 4237: 稻草人(CDQ分治+单调栈+二分)

    4237: 稻草人 Time Limit: 40 Sec  Memory Limit: 256 MB Submit: 1352  Solved: 594 [Submit][Status][Discus ...

  7. BZOJ 3687 简单题

    3687: 简单题 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 1073  Solved: 518 [Submit][Status][Discus ...

  8. BZOJ 2961 共点圆 CDQ分治+凸包

    题目大意:给定平面,多次插入点和圆,每次插入点时询问当前插入的点是否在之前插入的所有圆中并且至少在一个圆中 直接用数据结构维护这些点和圆不是很好写,我们考虑CDQ分治 对于每层分治,我们需要对于[mi ...

  9. bzoj 3687: 简单题

    2333,昨天模拟赛第一题死都想不出怎么优化tarjan,然而正解是一个kora***什么什么的东西,就是正反两遍dfs,然后这个算法求强联通分量的话,是可以用bitset来优化一下的(只考虑点). ...

最新文章

  1. 一文概览深度学习中的激活函数
  2. 计算机文件无法显示后缀,但一般情况下电脑默认是看不到文件格式显示(也就是文件扩展名)...
  3. mysql性能优化的一些建议
  4. 【泰语歌】กลับคำสาหล่า 歌手:Mike Piromporn
  5. 全志A33-ARM linux开机进入uboot命令行
  6. 数据结构实验之图论四:迷宫探索_迷宫搜索类的双向bfs问题(例题详解)
  7. 支付宝服务商子商户_怎么成为支付宝刷脸支付服务商?
  8. 手机网站开发相关介绍
  9. window.open的小问题
  10. AFNetworking Post Raw Data(JSON)
  11. java扫雷游戏课程设计素材_练习:仿Windows扫雷游戏
  12. 【读书笔记->统计学】11-01 总体和样本的估计-总体均值、样本均值、点估计量、总体方差、估计总体方差概念简介
  13. 10大免费FLV播放器下载[转]
  14. Devfreq Bus Dcvs
  15. 【VOLTE】【SRVCC】【3】 VOLTE SRVCC切换失败场景
  16. 随机矩阵 stochastic matrix
  17. python读取csv文件‘gbk‘ codec can‘t decode byte 0xbf in position 2: illegal multibyte sequence
  18. Mysql - 知识图谱总览
  19. 微信小程序获取网络状态
  20. getservbyname、getservbyport

热门文章

  1. 关于IAP:测试时能获取产品价格,却不能获取产品名称的问题
  2. WordPress免费精美主题分享系列之艺术风格篇
  3. 4月份SCCM/ConfigMgr的5大看点
  4. 程序员发展职业规划_大厂程序员总结:程序员30岁前,该如何规划自己的职业发展?...
  5. unity场景素材_[游戏素材]游戏场景环境天气变化Unity游戏素材资源
  6. H5上传文件又双叒叕开测了!
  7. _tkinter.TclError: no display name and no $DISPLAY environment variable
  8. 灰度资产管理总规模突破420亿美元
  9. 尼日利亚年轻人推动该国登上比特币谷歌搜索排名榜首
  10. 跨链项目Cosmos主网升级提案已开启投票 目前投票率为19.10%