题意:二维的树状数组
注意的有三个地方,
输入进去的坐标都加1,防止lowbit(0) + 0造成死循环
还有就是询问矩形面积的时候,输入进去的x1,x2,y1,y2,可能不是正对角线,要转化成正对角线

初始化的时候,是每个点的值为1

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include <cmath>
  5. #include<stack>
  6. #include<vector>
  7. #include<map>
  8. #include<set>
  9. #include<queue>
  10. #include<algorithm>
  11. using namespace std;
  12.  
  13. typedef long long LL;
  14. const int INF = (<<)-;
  15. const int mod=;
  16. const int maxn=;
  17.  
  18. int a[][],c[][];
  19.  
  20. int lowbit(int x){ return x & (-x);}
  21.  
  22. int sum(int x,int y){
  23. int ret=;
  24. for(int i=x;i>;i-=lowbit(i))
  25. for(int j=y;j>;j-=lowbit(j))
  26. ret+=c[i][j];
  27.  
  28. return ret;
  29. }
  30.  
  31. void add(int x,int y,int d){
  32. for(int i=x;i<;i+=lowbit(i))
  33. for(int j=y;j<;j+=lowbit(j))
  34. c[i][j]+=d;
  35. }
  36.  
  37. void init(){
  38. memset(c,,sizeof(c));
  39. for(int i=;i<;i++){
  40. for(int j=;j<;j++){
  41. add(i,j,);
  42. a[i][j] = ;
  43. }
  44. }
  45. }
  46.  
  47. int main(){
  48. int T;
  49. int kase = ;
  50. scanf("%d",&T);
  51. while(T--){
  52. printf("Case %d:\n",++kase);
  53. init();
  54. int m;
  55. scanf("%d%*c",&m);
  56. while(m--){
  57. char cmd;
  58. scanf("%c",&cmd);
  59. if(cmd == 'S') {
  60. int x,xx,y,yy,x1,x2,y1,y2;
  61. scanf("%d%d%d%d%*c",&x,&y,&xx,&yy);
  62. x++;y++;xx++;yy++;
  63. x1 = min(x,xx);x2 = max(x,xx);
  64. y1 = min(y,yy); y2 = max(y,yy);
  65.  
  66. int ans=;
  67. ans += sum(x1-,y1-);
  68. ans -= sum(x1-,y2);
  69. ans -= sum(x2,y1-);
  70. ans += sum(x2,y2);
  71. printf("%d\n",ans);
  72. }
  73.  
  74. if(cmd == 'A'){
  75. int x1,y1,n1;
  76. scanf("%d%d%d%*c",&x1,&y1,&n1);
  77. x1++;y1++;
  78. a[x1][y1]+=n1;
  79. add(x1,y1,n1);
  80. }
  81. if(cmd == 'D'){
  82. int x1,y1,n1;
  83. scanf("%d%d%d%*c",&x1,&y1,&n1);
  84. x1++;y1++;
  85. n1 = min(n1,a[x1][y1]);
  86. a[x1][y1]-=n1;
  87. add(x1,y1,-n1);
  88. }
  89. if(cmd == 'M'){
  90. int x1,y1,x2,y2,n1;
  91. scanf("%d%d%d%d%d%*c",&x1,&y1,&x2,&y2,&n1);
  92. x1++;y1++;x2++;y2++;
  93. n1=min(n1,a[x1][y1]);
  94. a[x1][y1]-=n1;a[x2][y2]+=n1;
  95. add(x1,y1,-n1);
  96. add(x2,y2,n1);
  97. }
  98. }
  99. }
  100. return ;
  101. }

HDU 1892 See you~ 【 二维树状数组 】的更多相关文章

  1. HDU 1892(书架统计 二维树状数组)

    题意是在二维平面上在一些位置上进行数据的增删改查操作,使用树状数组(了解树状数组点这里) 原来的树状数组在求区间和时是 sum( x, y ) = getsum( y ) - getsum( x - ...

  2. HDU 1892 See you~ (二维树状数组)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1892 See you~ Problem Description Now I am leaving h ...

  3. 【 HDU - 4456 】Crowd (二维树状数组、cdq分治)

    BUPT2017 wintertraining(15) #5A HDU 4456 题意 给你一个n行n列的格子,一开始每个格子值都是0.有M个操作,p=1为第一种操作,给格子(x,y)增加z.p=2为 ...

  4. hdu 2642 Stars 【二维树状数组】

    题目 题目大意:Yifenfei是一个浪漫的人,他喜欢数天上的星星.为了使问题变得更容易,我们假设天空是一个二维平面,上面的星星有时会亮,有时会发暗.最开始,没有明亮的星星在天空中,然后将给出一些信息 ...

  5. hdu 5517 Triple(二维树状数组)

    Triple Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  6. HDU 5517---Triple(二维树状数组)

    题目链接 Problem Description Given the finite multi-set A of n pairs of integers, an another finite mult ...

  7. HDU 5517 【二维树状数组///三维偏序问题】

    题目链接:[http://acm.split.hdu.edu.cn/showproblem.php?pid=5517] 题意:定义multi_set A<a , d>,B<c , d ...

  8. HDU 5465 Clarke and puzzle Nim游戏+二维树状数组

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5465 Clarke and puzzle  Accepts: 42  Submissions: 26 ...

  9. hdu 2642 二维树状数组 单点更新区间查询 模板水题

    Stars Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/65536 K (Java/Others) Total Subm ...

  10. hdu 2642二维树状数组 单点更新区间查询 模板题

    二维树状数组 单点更新区间查询 模板 从零开始借鉴http://www.2cto.com/kf/201307/227488.html #include<stdio.h> #include& ...

随机推荐

  1. redis模拟消息订阅

    使用办法: 订阅端: Subscribe 频道名称 发布端: publish 频道名称 发布内容 客户端例子: redis 127.0.0.1:6379> subscribe news Read ...

  2. 一个基于React整套技术栈+Node.js的前端页面制作工具

    pagemaker是一个前端页面制作工具,方便产品,运营和视觉的同学迅速开发简单的前端页面,从而可以解放前端同学的工作量.此项目创意来自网易乐得内部项目nfop中的pagemaker项目.原来项目的前 ...

  3. Unity 脚本挂载位置

    原则:谁的脚本,挂载到谁身上 1,一般场景中会有个GameController脚本,挂在空物体上. 2,我见很多人脚本习惯挂到Camera上,好吧,不知算不算规范.

  4. js浏览器下载总结(ios、and、微信、qq)

    前段时间做了个项目,里面关于手机移动端下载的问题 开始是判断微信.ios和android系统的下载 因为微信屏蔽点击事件和链接的缘故,需要通过打开新页面来进行下载 ios和android的下载分别为不 ...

  5. 加减法计算器-java

    由于经常进行较大数据的加减法计算,好多计算器都是转换成科学技术法的,所以自己用java写了一个 功能如下: 1,可以输入多个带千位分隔符的数字,进行加减法计算 2,结果展示带千位分隔符 3,结果展示不 ...

  6. GitHub上传项目,使用desktop(客户端)教程

    GitHub上传项目,使用desktop(客户端)教程  搜索“GitHub上传项目”,能得到很多相关的文章教程,里面讲的都特别麻烦,要弄什么ssh之类的,可算是吓坏了我,使我非常的怀疑为什么GitH ...

  7. 题解 P3978 【[TJOI2015]概率论】

    这道题...好像是第一道我自己切出来的黑题... 先说一句,牛顿二项式蒟蒻并不会,可以说是直接套结论. 求诸位老爷轻喷. 这道题用卡特兰数搞. 卡特兰数这玩意从普及组初赛一路考到省选,十分有用. 如果 ...

  8. mysql数据实时同步到Elasticsearch

    业务需要把mysql的数据实时同步到ES,实现低延迟的检索到ES中的数据或者进行其它数据分析处理.本文给出以同步mysql binlog的方式实时同步数据到ES的思路, 实践并验证该方式的可行性,以供 ...

  9. [AngularJS]Chapter 3 使用AngularJS构建应用程序

    本章内容提要: 如何布置AngularJS进行快速开发 开启服务器进行测试 使用Karma进行单元测试用例测试 编译压缩AngularJS进行生产 使用Batarang进行Debug 如何简化开发工作 ...

  10. 接口測试-HAR

    參考文章 雪球的 HttpApi 接口測试框架设计 HAR(HTTP Archive)规范 神器--Chrome开发人员工具(一) HAR是什么 一句话:关于HTTP所有的信息的一种文件保存格式 HA ...