题意:

最多1000*1000的方格,各方格开始有一本书

有四种操作:对指定方格把书拿走或向里面放书,从一个方格那一定量的书放到另一个方格,查询给定对角线顶点的坐标的矩形范围内包含的书的总数

分析:

二维BIT,注意方格的书数小于拿书数量的情况

  1. #include <map>
  2. #include <set>
  3. #include <list>
  4. #include <cmath>
  5. #include <queue>
  6. #include <stack>
  7. #include <cstdio>
  8. #include <vector>
  9. #include <string>
  10. #include <cctype>
  11. #include <complex>
  12. #include <cassert>
  13. #include <utility>
  14. #include <cstring>
  15. #include <cstdlib>
  16. #include <iostream>
  17. #include <algorithm>
  18. using namespace std;
  19. typedef pair<int,int> PII;
  20. typedef long long ll;
  21. #define lson l,m,rt<<1
  22. #define pi acos(-1.0)
  23. #define rson m+1,r,rt<<11
  24. #define All 1,N,1
  25. #define N 1010
  26. #define read freopen("in.txt", "r", stdin)
  27. const ll INFll = 0x3f3f3f3f3f3f3f3fLL;
  28. const int INF= 0x7ffffff;
  29. const int mod = ;
  30. int sum[N][N],n,a[N][N];
  31. int lowbit(int x){
  32. return (x)&(-x);
  33. }
  34. void add(int x,int y,int v){
  35. for(int i=x;i<N;i+=lowbit(i))
  36. for(int j=y;j<N;j+=lowbit(j)){
  37. sum[i][j]+=v;
  38. }
  39. }
  40. int sum1(int x,int y){
  41. int num=;
  42. for(int i=x;i>;i-=lowbit(i))
  43. for(int j=y;j>;j-=lowbit(j))
  44. num+=sum[i][j];
  45. return num;
  46. }
  47. int main()
  48. {
  49. int t,test=;
  50. char op[];
  51. int x1,x2,y1,y2,v,q;
  52. scanf("%d",&t);
  53. while(t--){
  54. memset(sum,,sizeof(sum));
  55. for(int i=;i<N;++i)
  56. for(int j=;j<N;++j){
  57. a[i][j]=;
  58. add(i,j,);
  59. }
  60. printf("Case %d:\n",++test);
  61. scanf("%d",&q);
  62. while(q--){
  63. scanf("%s",op);
  64. if(op[]=='S'){
  65. scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
  66. int sx=min(x1,x2);
  67. int ex=max(x1,x2);
  68. int sy=min(y1,y2);
  69. int ey=max(y1,y2);
  70. sx++;ex++;
  71. sy++;ey++;
  72. int tmp=sum1(ex,ey)-sum1(sx-,ey)-sum1(ex,sy-)+sum1(sx-,sy-);
  73. printf("%d\n",tmp);
  74. }
  75. else if(op[]=='A'){
  76. scanf("%d%d%d",&x1,&y1,&v);
  77. x1++;
  78. y1++;
  79. add(x1,y1,v);
  80. a[x1][y1]+=v;
  81. }
  82. else if(op[]=='D'){
  83. scanf("%d%d%d",&x1,&y1,&v);
  84. x1++;
  85. y1++;
  86. if(v>a[x1][y1])v=a[x1][y1];
  87. add(x1,y1,-v);
  88. a[x1][y1]-=v;
  89. }
  90. else if(op[]=='M'){
  91. scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&v);
  92. x1++;y1++;
  93. x2++;y2++;
  94. if(a[x1][y1]<v)
  95. v=a[x1][y1];
  96. add(x1,y1,-v);
  97. add(x2,y2,v);
  98. a[x1][y1]-=v;
  99. a[x2][y2]+=v;
  100. }
  101. }
  102. }
  103. return ;
  104. }

HDU 1892-See you(二维BIT)的更多相关文章

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

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

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

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

  3. HDU 2159 FATE(二维费用背包)

    FATE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  4. HDU 2159 FATE (二维完全背包

    FATE http://acm.hdu.edu.cn/showproblem.php?pid=2159 Problem Description 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备 ...

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

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

  6. Hdu 2888 Check Corners (二维RMQ (ST))

    题目链接: Hdu 2888 Check Corners 题目描述: 给出一个n*m的矩阵,问以(r1,c1)为左上角,(r2,c2)为右下角的子矩阵中最大的元素值是否为子矩阵的顶点? 解题思路: 二 ...

  7. HDU 4819 Mosaic (二维线段树)

    Mosaic Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others)Total S ...

  8. HDU 2159 FATE【二维完全背包】

    题意:xhd玩游戏,还需要n个经验值升级,还留有m的忍耐度,但是他最多打s只怪,给出k个怪的经验值a[i],以及消耗的忍耐度b[i],问xhd能不能升级-- 因为有两个限定,忍耐度,和最多打s只怪(即 ...

  9. HDU 3127 WHUgirls【二维完全背包】

    题意:给出一个长为a,宽为b的布,再给出n个围巾的规格(长x,宽y,价值c),问怎样裁剪能够得到最大的价值. ----第一次做的时候不会---然后放到今天做--发现还是不会---于是又--看题解了-- ...

随机推荐

  1. Fragment (一)

      1,简介 Fragement(碎片)允许将Activity拆分成多个完全独立封装的可重用组件,每个组件有它自己的生命周期和UI布局,由此可见,Fragement依赖于Activity,它的生命周期 ...

  2. lintcode 中等题:Simplify Path 简化路径

    题目 简化路径 给定一个文档(Unix-style)的完全路径,请进行路径简化. 样例 "/home/", => "/home" "/a/./b ...

  3. Compare_Connect_Letter

    题目描述: 比较两个数字mn和nm(如果mn<nm则m<n, 如果nm<mn则n<m,否则n=m) 连接这两个数字 如(mnnm) //比较两个数字mn和nm(如果mn< ...

  4. Spring的lazy-init详解

    1.Spring中lazy-init详解ApplicationContext实现的默认行为就是在启动服务器时将所有singleton bean提前进行实例化(也就是依赖注入).提前实例化意味着作为初始 ...

  5. 无刷新分页 jquery.pagination.js

     无刷新分页 jquery.pagination.js 采用Jquery无刷新分页插件jquery.pagination.js实现无刷新分页效果 1.插件参数列表 http://www.dtan.so ...

  6. Filter登录验证过滤器(全局)

    通过Filter来定义一个登录验证过滤器,这是就不需要在每一个JSP页面添加判断用户合法性的代码了. 以下示例中包含了5个文件,一个是登录表单LoginForm.jsp,一个是登录判断页LoginCo ...

  7. 深度神经网络如何看待你,论自拍What a Deep Neural Network thinks about your #selfie

    Convolutional Neural Networks are great: they recognize things, places and people in your personal p ...

  8. Linux批量杀进程

    ps -ef |grep 进程名|grep -v grep |awk '{print $2}' |xargs kill -9

  9. linux scp

    scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令.linux的scp命令可以在linux服务器之间复制文件和目录. scp命令的用处: scp ...

  10. 点(Dot)与像素(Pixel)的区别

    DPI中的点(Dot)与图像分辨率中的像素(Pixel)是容易混淆的两个概念, DPI中的点可以说是硬件设备最小的显示单元, 而像素则既可是一个点,又可是多个点的集合.在扫描仪扫描图像时,扫描仪的每一 ...