原题传送:http://poj.org/problem?id=2155

  楼教神题,二维树状数组。

  弄懂一维树状数组,二维的也不难懂。可以参考NOCOW。

  需要注意的是,修改的四个点分别是(x1, y1), (x2+1, y1), (x1, y2+1), (x2+1, y2+1),而不是(x1, y1), (x2, y1), (x1, y2), (x2, y2),因为如果是后者的话,(x2, y2)会被4次覆盖(也就是点(x2, y2)不会被改变)。

View Code

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define N 1001
 4 typedef long long LL;
 5
 6 LL c[N][N];
 7
 8 LL lowbit(LL x)
 9 {
10     return x & (-x);
11 }
12
13 void modify(int x, int y)
14 {
15     for(int i = x; i < N; i += lowbit(i))
16     for(int j = y; j < N; j += lowbit(j))
17         c[i][j] ++;
18     return ;
19 }
20
21 LL query(int x, int y)
22 {
23     LL ans = 0;
24     for(int i = x; i > 0; i -= lowbit(i))
25     for(int j = y; j > 0; j -= lowbit(j))
26         ans += c[i][j];
27     return ans;
28 }
29
30 int main()
31 {
32     int cas, n, tt, t, x1, y1, x2, y2;
33     char op[3];
34     scanf("%d", &tt);
35     for(cas = 1; cas <= tt; cas ++)
36     {
37         if(cas != 1)
38             putchar('\n');
39         memset(c, 0, sizeof c);
40         scanf("%d%d", &n, &t);
41         while(t --)
42         {
43             scanf("%s", op);
44             if(op[0] == 'C')
45             {
46                 scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
47                 modify(x1, y1);
48                 modify(x2 + 1, y1);
49                 modify(x1, y2 + 1);
50                 modify(x2 + 1, y2 + 1);
51             }
52             else if(op[0] == 'Q')
53             {
54                 scanf("%d%d", &x1, &y1);
55                 printf("%I64d\n", query(x1, y1) & 1);
56             }
57         }
58     }
59     return 0;
60 }

转载于:https://www.cnblogs.com/huangfeihome/archive/2012/10/18/2729502.html

POJ2155 Matrix相关推荐

  1. POJ2155 - Matrix(二维树状数组)

    POJ2155 - Matrix 文章目录 题目 题解: 代码 题目 给你一个二维矩阵,初始化为0,然后可以进行两次操作: C:x,y,x1,y2 对该小矩阵内的数进行取反 Q:查询某个点是0还是1 ...

  2. POJ-2155 Matrix 二维线段树 | 树状数组

    题目链接:http://poj.org/problem?id=2155 比较典型的二维线段树题目,直接永久更新即可,在询问的时候,要询问每个x区间的子树,复杂度O(log(n)^2). 也可以用树状数 ...

  3. [POJ2155] Matrix(二维线段树,树套树)

    题目链接:http://poj.org/problem?id=2155 题意:给一个01矩阵,两个操作,翻转:子矩阵里每一个数都由0变1,1变0. 查询:查询某一点是0还是1. 一直以为二维线段树就是 ...

  4. POJ2155 Matrix二维线段树经典题

    题目链接 二维树状数组 1 #include<iostream> 2 #include<math.h> 3 #include<algorithm> 4 #inclu ...

  5. POJ2155 Matrix 二维线段树

    关键词:线段树 二维线段树维护一个 维护一个X线段的线段树,每个X节点维护一个 维护一个Y线段的线段树. 注意,以下代码没有PushDownX.因为如果要这么做,PushDownX时,由于当前X节点的 ...

  6. 基础省选+NOI-第2部分 数据结构进阶(II)

    1.量产数据结构 [暖*墟] #洛谷省选网课# 7.30量产数据结构 - 花神&缘浅flora - 博客园 [暖*墟] #洛谷省选网课# 7.30量产数据结构_flora715的博客-CSDN ...

  7. ICPC程序设计题解书籍系列之九:罗勇军《算法竞赛入门到进阶》

    罗书<算法竞赛入门到进阶>题目一览 第1章 算法竞赛概述 HDU1000 HDU1089-HDU1096 A+B for Input-Output Practice (I)-(VIII)( ...

  8. ICPC程序设计题解书籍系列之三:秋田拓哉:《挑战程序设计竞赛》(第2版)

    白书<挑战程序设计竞赛>(第2版)题目一览 白书:秋田拓哉:<挑战程序设计竞赛>(第2版) 第1章 蓄势待发--准备篇(例题) POJ1852 UVa10714 ZOJ2376 ...

  9. Android 自定义View ——Matrix (矩阵)

    Matrix的作用: Matrix类包含一个3x3矩阵,用于转换坐标 Matrix (矩阵) 的原理很遗憾自己目前也是含糊的很,这里就不说了,记录自己在项目使用的方法, 这里就简单的记录下Matrix ...

  10. Codeforces 903F Clear The Matrix(状态压缩DP)

    题目链接 Clear The Matrix 题意 给定一个$4 * n$的矩形,里面的元素为$'.'$或$'*'$.现在有$4$种正方形可以覆盖掉$'*'$,正方形的边长分别为$1,2,3,4$. 求 ...

最新文章

  1. fushioncharts破解
  2. 【深度学习入门到精通系列】留一交叉验证法Python实现(看不懂你来打我~!)
  3. 怎样保证客户端和服务器端数据的一致性(数据的同步)
  4. C/C++在Android开发中的应用
  5. 前沪江高级架构师学习笔记分享:分布式框架设计与实现
  6. ASP.NET 2.0与SQL Express 2005在迁移到Windows 2003时发生数据库为只读的错误
  7. webpack打开项目命令_webpack打包好的页面在项目中怎么运行?
  8. Asp.net 调用sqlserver存储过程参数传中文乱码!
  9. 我可以不做但我不可以不会
  10. spring-第五篇之spring容器中的bean
  11. Keli μVision中 STR指令写入内存无效
  12. android 微信6.1版本,微信6.1老版本-微信旧版6.1安卓版下载-Appfound
  13. 公交非接触IC卡读写器的应用设计
  14. 【机器学习】(5.4)聚类--密度聚类(DBSCAN、MDCA)
  15. nssa和stub_Stub区域和NSSA区域比较
  16. 视频剪辑计算机配置要求,对于视频剪辑工作,需要什么样的电脑配置才满足要求...
  17. Unity3D关于蓄力跳跃
  18. Proximity sensor---Px318J
  19. linux查看串口信息tty*
  20. 腾讯位置服务---->(小程序简单使用+显示附近WC步行路线)

热门文章

  1. 个人源码管理,SVN本地化
  2. 文件比较命令:comm
  3. # 国王游戏(贪心+大数乘除+微扰法证明)
  4. C#中声明、调用和配置事件的演示源码
  5. ArcMAp10.2生成栅格数据时报错
  6. 最全最新个税计算公式---今天你税了吗?
  7. SetWindowLong 除去窗体标题栏
  8. 把一个下拉框中的选项添加到另一个中
  9. QuickWAP 2.x注册方法和购买注意事项
  10. Flash Memory(一)