~~~题面~~~

题解:

二维树状数组的板子题,,,学了这么久第一次写二维树状数组,惭愧啊。

怎么写就不说了,看代码吧。

跟普通的是一样的写法

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define R register int
  4. #define AC 302
  5. #define lowbit(x) (x & (-x))
  6. int n, m, k;
  7. int a[AC][AC], c[AC][AC][AC];
  8.  
  9. inline int read()
  10. {
  11. int x = ;char c = getchar();
  12. while(c > '' || c < '') c = getchar();
  13. while(c >= '' && c <= '') x = x * + c - '', c = getchar();
  14. return x;
  15. }
  16.  
  17. inline void add(int x, int y, int w, int h)
  18. {
  19. for(R i = x; i <= n; i += lowbit(i))
  20. for(R j = y; j <= m; j += lowbit(j))
  21. c[i][j][w] += h;
  22. }
  23.  
  24. inline int search(int x, int y, int w)
  25. {
  26. int ans = ;
  27. if(! x || !y || x > n || y > m) return ;
  28. for(R i = x; i ; i -= lowbit(i))
  29. for(R j = y; j ; j -= lowbit(j))
  30. ans += c[i][j][w];
  31. return ans;
  32. }
  33.  
  34. void pre()
  35. {
  36. n = read(), m = read();
  37. for(R i = ; i <= n; i++)
  38. for(R j = ; j <= m; j++)
  39. {
  40. a[i][j] = read();
  41. add(i, j, a[i][j], );//建立树状数组
  42. }
  43. }
  44.  
  45. void work()
  46. {
  47. int opt, x1, x2, x3, x4, x5, tmp;
  48. k = read();
  49. for(R i = ; i <= k; i++)
  50. {
  51. opt = read();
  52. if(opt == )
  53. {
  54. x1 = read(), x2 = read(), x3 = read();
  55. if(x3 != a[x1][x2])
  56. {
  57. add(x1, x2, a[x1][x2], -);//消除原有的值
  58. add(x1, x2, x3, );//新增值
  59. a[x1][x2] = x3;
  60. }
  61. }
  62. else
  63. {
  64. x1 = read(), x3 = read(), x2 = read(), x4 = read(), x5 = read();
  65. tmp = search(x3, x4, x5) - search(x3, x2 - , x5) - search(x1 - , x4, x5) + search(x1 - , x2 - , x5);//error,,,-1啊
  66. printf("%d\n", tmp);
  67. }
  68. }
  69. }
  70.  
  71. int main()
  72. {
  73. // freopen("in.in", "r", stdin);
  74. pre();
  75. work();
  76. // fclose(stdin);
  77. return ;
  78. }

[JSOI2009]计数问题 二维树状数组的更多相关文章

  1. 洛谷P4054 [JSOI2009]计数问题(二维树状数组)

    题意 题目链接 Sol 很傻x的题.. c才100, n, m才300,直接开100个二维树状数组就做完了.. #include<bits/stdc++.h> using namespac ...

  2. [JSOI2009]计数问题 二维树状数组BZOJ 1452

    题目描述 一个n*m的方格,初始时每个格子有一个整数权值.接下来每次有2种操作: 改变一个格子的权值: 求一个子矩阵中某种特定权值出现的个数. 输入输出格式 输入格式: 第一行有两个数N,M. 接下来 ...

  3. bzoj1452 [JSOI2009]Count ——二维树状数组

    中文题面,给你一个矩阵,每一个格子有数字,有两种操作. 1. 把i行j列的值更改 2. 询问两个角坐标分别为(x1,y1) (x2,y2)的矩形内有几个值为z的点. 这一题的特点就是给出的z的数据范围 ...

  4. bzoj 1452: [JSOI2009]Count ——二维树状数组

    escription Input Output Sample Input Sample Output 1 2 HINT ———————————————————————————————————————— ...

  5. 【bzoj1452】[JSOI2009]Count 二维树状数组

    题目描述 输入 输出 样例输入 样例输出 1 2 题解 二维树状数组 一开始没看到 1≤c≤100 ,想到了主X树和X块,结果发现c的范围那么小... 二维树状数组水题,和一维的一样,向上修改,向下查 ...

  6. BZOJ 1452: [JSOI2009]Count 二维树状数组

    1452: [JSOI2009]Count Description Input Output Sample Input Sample Output 1 2 HINT Source 题解:设定C[101 ...

  7. 模板:二维树状数组 【洛谷P4054】 [JSOI2009]计数问题

    P4054 [JSOI2009]计数问题 题目描述 一个n*m的方格,初始时每个格子有一个整数权值.接下来每次有2种操作: 改变一个格子的权值: 求一个子矩阵中某种特定权值出现的个数. 输入输出格式 ...

  8. 【二维树状数组】计数问题 @JSOI2009/upcexam5911

    时间限制: 1 Sec 内存限制: 128 MB 题目描述 一个n*m的方格,初始时每个格子有一个整数权值.接下来每次有2种操作: 改变一个格子的权值: 求一个子矩阵中某种特定权值出现的个数. 输入 ...

  9. 二维树状数组 BZOJ 1452 [JSOI2009]Count

    题目链接 裸二维树状数组 #include <bits/stdc++.h> const int N = 305; struct BIT_2D { int c[105][N][N], n, ...

随机推荐

  1. 两个有序数组合并成一个有序数组(要求时间复杂度为O(n))

    面试题: 怎样把两个有序数组合并成有序数组呢 逻辑步骤: 1.假设两个数组为A和B 2.A和B都是从小到大的顺序进行排列 ** 1.我们可以直接比较两个数组的首元素,哪个小就把这个小元素放入可变数组. ...

  2. 下载Web微信视频

    1. 用浏览器(我用Chrome)登录web微信(wx.qq.com) 2. 这个时候如果有人发视频,可以点开播放.用F12打开chrome的调试平台,查看视频源的URL(绿色框的src内容) 3. ...

  3. 「日常训练」 Longest Run on a Snowboard (UVA-10285)

    题意 其实就是一条二维的LIS,但是还是做的一愣一愣的,多努力. 考虑$dp[i][j]$为从(i,j)出发的二维LIS的最大值,那么$dp[i][j]=max\{dp[i−di[k]][j−dj[k ...

  4. UE4蓝图小记

    http://www.element3ds.com/forum.php?mod=viewthread&tid=76930&page=1&authorid=104414 http ...

  5. 【swiper】 滑块组件说明

    swiper 滑块视图容器,其原型如下: <swiper indicator-dots="[Boolean]" indicator-color="[Color]&q ...

  6. 关于javascript的一个小问题,请问有人看出啥问题吗?

    最近学习javascript,有一个问题挺奇怪的,先贴出代码: function binarySearch(){ var arr = [0,1,2,3]; var res = actbinarySea ...

  7. (查找函数+atoi)判断与(注册函数+strcmp函数)判断两种方法

    loadrunner中接口判断的2中方法    如下: 1. ●查找函数web_reg_find() ● atoi():将字符串转换为整型值 作比较  > 0 Action() { //检查点函 ...

  8. Scala学习笔记之Actor多线程与线程通信的简单例子

    题目:通过子线程读取每个文件,并统计单词数,将单词数返回给主线程相加得出总单词数 package review import scala.actors.{Actor, Future} import s ...

  9. opencv-学习笔记(1)常用函数和方法。

    opencv-学习笔记(1)常用函数和方法. cv2.imread(filename,falg) filename是文件名字 flag是读入的方式 cv2.MREAD_UNCHANGED :不进行转化 ...

  10. Kali渗透测试工具-nslookup

    1.交互模式 终端输入nslookup进入交互模式 (1)查询A地址记录(默认) set q=a A记录简单理解将域名转换成对应的IP地址 (2)查询mail exchanger set q=mx m ...