2683: 简单题

Time Limit: 50 Sec  Memory Limit: 128 MB
Submit: 1803  Solved: 731
[Submit][Status][Discuss]

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。

cdq分治三维偏序 三维分别是操作序号,横坐标,纵坐标
把一个询问拆成4个,就变成了处理二维前缀和问题
对横坐标排序,操作序号cdq分治,纵坐标用bit处理

  1. #include<bits/stdc++.h>
  2. #define N 200005
  3. using namespace std;
  4. int n,m,t,c[N*],ans[N];
  5. struct query{
  6. int x,y,v,id,op,bl;
  7. bool operator < (const query &b)const{
  8. if(x==b.x&&y==b.y)return id<b.id;
  9. return x==b.x?y<b.y:x<b.x;
  10. }
  11. }q[N<<],a[N<<];
  12.  
  13. void add(int x,int y,int v){
  14. if(!x||!y)return;
  15. q[++m].x=x;q[m].y=y;q[m].id=m;
  16. q[m].op=;q[m].bl=t;q[m].v=v;
  17. }
  18. void update(int p,int x){
  19. while(p<=n){
  20. c[p]+=x;
  21. p+=p&-p;
  22. }
  23. }
  24. int ask(int x){
  25. int ret=;
  26. while(x){
  27. ret+=c[x];
  28. x-=x&-x;
  29. }
  30. return ret;
  31. }
  32.  
  33. void solve(int l,int r){
  34. if(l==r)return;
  35. int mid=(l+r)>>,p1=l,p2=mid+;
  36. for(int i=l;i<=r;++i){
  37. if(q[i].id<=mid&&q[i].op==)update(q[i].y,q[i].v);
  38. if(q[i].id>mid&&q[i].op==)ans[q[i].bl]+=ask(q[i].y)*q[i].v;
  39. }
  40. for(int i=l;i<=r;++i)
  41. if(q[i].op==&&q[i].id<=mid)update(q[i].y,-q[i].v);
  42. for(int i=l;i<=r;++i){
  43. if(q[i].id<=mid)a[p1++]=q[i];
  44. else a[p2++]=q[i];
  45. }
  46. for(int i=l;i<=r;++i)q[i]=a[i];
  47. solve(l,mid);solve(mid+,r);
  48. }
  49. int main(){
  50. scanf("%d",&n);
  51. while(){
  52. static int op,x1,x2,y1,y2,v;
  53. scanf("%d",&op);
  54. if(op==){
  55. scanf("%d%d%d",&x1,&y1,&v);
  56. q[++m].x=x1;q[m].y=y1;q[m].v=v;
  57. q[m].id=m;q[m].op=op;
  58. }
  59. if(op==){
  60. scanf("%d%d%d%d",&x1,&y1,&x2,&y2);++t;
  61. add(x1-,y1-,);add(x2,y2,);
  62. add(x1-,y2,-);add(x2,y1-,-);
  63. }
  64. if(op==)break;
  65. }
  66. sort(q+,q++m);
  67. solve(,m);
  68. for(int i=;i<=t;i++)
  69. printf("%d\n",ans[i]);
  70. return ;
  71. }

bzoj2683简单题 cdq分治的更多相关文章

  1. BZOJ2683: 简单题(cdq分治 树状数组)

    Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 2142  Solved: 874[Submit][Status][Discuss] Descripti ...

  2. Bzoj2683 简单题 [CDQ分治]

    Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 1071  Solved: 428 Description 你有一个N*N的棋盘,每个格子内有一个整数, ...

  3. 【BZOJ1176】[Balkan2007]Mokia/【BZOJ2683】简单题 cdq分治

    [BZOJ1176][Balkan2007]Mokia Description 维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=1600 ...

  4. 【bzoj1176】[Balkan2007]Mokia/【bzoj2683】简单题 CDQ分治+树状数组

    bzoj1176 题目描述 维护一个W*W的矩阵,初始值均为S(题目描述有误,这里的S没有任何作用!).每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=160000,询问数 ...

  5. 【BZOJ-1176&2683】Mokia&简单题 CDQ分治

    1176: [Balkan2007]Mokia Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 1854  Solved: 821[Submit][St ...

  6. bzoj 1176: [Balkan2007]Mokia&&2683: 简单题 -- cdq分治

    2683: 简单题 Time Limit: 50 Sec  Memory Limit: 128 MB Description 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要 ...

  7. BZOJ 2683: 简单题 [CDQ分治]

    同上题 那你为什么又发一个? 因为我用另一种写法又写了一遍... 不用排序,$CDQ$分治的时候归并排序 快了1000ms... #include <iostream> #include ...

  8. BZOJ 2683 简单题 cdq分治+树状数组

    题意:链接 **方法:**cdq分治+树状数组 解析: 首先对于这道题,看了范围之后.二维的数据结构是显然不能过的.于是我们可能会考虑把一维排序之后还有一位上数据结构什么的,然而cdq分治却可以非常好 ...

  9. BZOJ 2683: 简单题(CDQ 分治)

    题面 Time Limit: 50 Sec  Memory Limit: 128 MB Description 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作: ...

随机推荐

  1. Struts2之Struts2的下载与安装

    Struts2的下载 登陆struts的官网 下载Full Distribution这个选项的struts2的包. 这是Struts2的完整版,里面包括Struts2的实例应用,空实例应用,核心库,源 ...

  2. zookeeper入门系列:paxos协议

    上一章讨论了一种强一致性的情况,即需要分布式事务来解决,本章我们来讨论一种最终一致的算法,paxos算法. paxos算法是由大牛lamport发明的,关于paxos算法有很多趣事.比如lamport ...

  3. python实现维吉尼亚解密

    # -*-coding:UTF-8-*- from sys import stdout miwen = "KCCPKBGUFDPHQTYAVINRRTMVGRKDNBVFDETDGILTXR ...

  4. 初学深度学习(TensorFlow框架的心得and经验总结)自用环境的总结

    初学者的时间大部分浪费在了环境上了: 建议直接上Linux系统,我推荐国产的深度系统,deepin这几年一直在不断的发展,现在15.4已经很不错了 1,图形化界面很漂亮,内置正版crossover,并 ...

  5. maven构建spring报错org.springframework.core.NestedRuntimeException cannot be resolved.

    Error:The type org.springframework.core.NestedRuntimeException cannot be resolved. It is indirectly ...

  6. iot前台开发环境:请求示例

    参考链接:http://www.cnblogs.com/keatkeat/category/872790.html 编辑->update保存 一.typescipt import { Injec ...

  7. python 网络爬虫与信息提取 学习笔记day4

    正则表达式简介: 简洁表示一组字符串的特征或者模式,在文本处理中十分常用,主要应用于字符串匹配中 1.  通用的字符串表达框架 2.  简洁表达一组字符串的表达式 3.  针对字符串表达简洁和特征思想 ...

  8. shiro中CacheManager相关的类结构介绍,提供redis Cache实现

    cacheManager主要用于对shiro中的session.realm中的认证信息.授权信息进行缓存. 1.类结构 2.接口及类介绍 CacheManager 提供根据名字获取cache的作用. ...

  9. python基础——面向对象进阶下

    python基础--面向对象进阶下 1 __setitem__,__getitem,__delitem__ 把对象操作属性模拟成字典的格式 想对比__getattr__(), __setattr__( ...

  10. POJ-1751 Highways---确定部分边的MST

    题目链接: https://vjudge.net/problem/POJ-1751 题目大意: 有一个N个城市M条路的无向图,给你N个城市的坐标,然后现在该无向图已经有M条边了,问你还需要添加总长为多 ...