题目地址:http://poj.org/problem?id=2155

题目:


t个测试样例, n*n的网格,q个询问

每次区间修改所做的操作:使区间内的数1变为0, 0变为1

输出每次询问的坐标点对应的值

解题思路:


一维/二维树状数组的讲解参见大佬博客:https://www.cnblogs.com/RabbitHu/p/BIT.html(不仅oi打得好,还是市状元ORZ)

二维树状数组模版题。

这里的区间修改可以转变成每次区间内的值都加1, 最后对2取模即可。

ac代码:


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxn = 1005;
#define lowbit(x) ((x) & (-x))
int tree[maxn][maxn];
int T, n, q, x11, y11, x22, y22, x, y;
void update(int x, int y, int v)
{for(int i = x; i < maxn; i += lowbit(i))for(int j = y; j < maxn; j += lowbit(j))tree[i][j] += v;
}
void range_update(int x1, int y1, int x2, int y2)
{update(x1, y1, 1);update(x1, y2 + 1, -1);update(x2 + 1, y2 + 1, 1);update(x2 + 1, y1, -1);
}
int getval(int x, int y)
{int res  = 0;for(int i = x; i > 0; i -= lowbit(i))for(int j = y; j > 0; j -= lowbit(j))res += tree[i][j];return res % 2;
}
int main()
{//freopen("/Users/zhangkanqi/Desktop/11.txt","r",stdin);scanf("%d", &T);for(int t = 1; t <= T; t++){if(t != 1) printf("\n");scanf("%d %d", &n, &q);getchar();memset(tree, 0, sizeof(tree));for(int i = 1; i <= q; i++){char op;scanf("%c", &op);// cout << "op:" << op << endl;if(op == 'C'){scanf("%d %d %d %d", &x11, &y11, &x22, &y22);getchar();range_update(x11, y11, x22, y22);}else{scanf("%d %d", &x, &y);getchar();printf("%d\n", getval(x, y));}}}return 0;
}

【POJ2155】Matrix(二维区间修改+单点查询---二维树状数组)相关推荐

  1. 1631 小鲨鱼在51nod小学(线段树区间修改+单点查询:不用下传lazy的区间修改)

    题目描述: 1631 小鲨鱼在51nod小学 鲨鱼巨巨2.0(以下简称小鲨鱼)以优异的成绩考入了51nod小学.并依靠算法方面的特长,在班里担任了许多职务. 每一个职务都有一个起始时间A和结束时间B, ...

  2. 树状数组之区间修改单点查询

    树状数组的区间修改单点查询 树状数组其实本质还单点修改区间查询,但是我们怎么延伸到这个呢,我们建立一个差分数组, 比如:                a[10]={4, 6, 7, 5, 1, 6, ...

  3. leetcode:218. 天际线问题【区间修改 + 单点查询 + 找最大值板子 + 线段树】

    分析 用哈希+set压缩一下 最终只考虑楼的不重复端点即可 最后返回每个端点处的最大值 ac code from functools import reduceclass SegTree:'''通用线 ...

  4. P3368 【模板】树状数组 2(区间修改单点查询)

    这是树状数组的基础操作,和差分结合在一起,其实这种操作我更习惯于线段树的写法.不过树状数组代码短,执行效率高,值得记录一下. #include<bits/stdc++.h> #define ...

  5. 树状数组的建树 单点修改 单点查询 区间修改 区间查询

    单点修改  单点查询   用普通数组就能写出来 单点修改  区间查询   用线段树  树状数组: 区间修改  区间查询   用线段树  树状数组: 区间修改  单点查询   用线段树  树状数组: 建 ...

  6. 树状数组相关应用之区间更新单点查询问题

    区间更新单点查询 树状数组的基本应用是单点更新,区间查询(例如求区间和). 鉴于树状数组的空间复杂度和时间复杂度都比线段树小 而且代码也短 所以就有大神用强大的脑洞YY出了区间修改+单点查询的树状数组 ...

  7. 树状数组的区间修改+查询

    首先看树状数组是用来求前缀和比较方便的一种数据结构 sum[i] = Sigma a[i] =Sum(bit[x]) 而区间修改也不难实现 就是引入一个差分数组del del[i]表示对i~n的修改 ...

  8. 树状数组(单点修改,区间修改等)

    前言:上次练习树状数组的专题还是半年前,练了练就过了,后来学了线段树,觉得树状数组这啥啊,线段树不香吗,就再也没管过树状数组了.直到几天前被树状数组血虐了,急忙爬回来补树状数组.(事实证明学的越少,越 ...

  9. 树状数组 / 二维树状数组

    一维树状数组 · 单点修改 + 单点查询: 直接使用即可 · 区间修改 + 单点查询: 另外维护一个维护前缀和的树状数组,查询时查询与原值相加即可. · 区间修改 + 区间查询: 若要查询区间$[1, ...

  10. 树状数组求区间和模板 区间可修改 参考题目:牛客小白月赛 I 区间

    从前有个东西叫树状数组,它可以轻易实现一些简单的序列操作,比如单点修改,区间求和;区间修改,单点求值等. 但是我们经常需要更高级的操作,比如区间修改区间查询.这时候树状数组就不起作用了,只能选择写一个 ...

最新文章

  1. 深入浅出Spring Security(二):FilterChainProxy的创建过程
  2. Android中的“再按一次返回键退出程序”实现
  3. 物联网概念升级,万物互联来袭
  4. convexHull函数
  5. python爬取百度贴吧xpath_爬虫基础系列xpath实战——爬取百度贴吧图片(3)
  6. The POM for com.ruifeng.tjtaxiqy:shiro:jar:0.0.1-SNAPSHOT is missing, no dependency information avai
  7. mysql增量备份具体步骤_记一次mysql全量备份、增量备份的学习过程
  8. 别不承认!搞懂那些数理原理,才发现它们和枯燥根本不沾边!
  9. SPS2003升级到MOSS2007相关资料及问题总结
  10. 【Elasticsearch】Elasticsearch 7 : 动态映射 dynamic
  11. 数仓建模的edw_浅谈数仓分层和模型
  12. python递归函数对照表_python-访问递归函数中附加到列表的值
  13. Win7 可以下载python最高什么版本?
  14. LiveGBS国标GB/T28181流媒体平台华为IPC设备GB35114配置接入说明
  15. Unity NavMesh寻路 A*(A star)分析及实例应用(一)
  16. Sleepy Cow Sorting犯困的奶牛排序(思维)
  17. TesterHome android app 编写历程(六)
  18. 计算机显示无法打开打印机添加,windows无法打开添加打印机怎么办 无法打开添加打印机解决方法...
  19. 用xpath解析网页
  20. linux不识别ntfs分区,解决linux 不能识别ntfs分区问题(linux系统挂载移动硬盘)

热门文章

  1. PHP文件上传实现的注意点
  2. Virtualbox中Ubuntu与windows共享文件夹设置
  3. unity3d多个版本共存
  4. mysql使用存储过程循环修改数据
  5. solidity 合约权限授权_Curve + zkSync L2:以太坊的ZK Rollup智能合约
  6. python给list添加元素_Python中给List添加元素的4种方法分享
  7. C语言基础第三次作业
  8. springMvc--接受日期类型参数处理
  9. 利用云服务器搭建内网映射服务器
  10. 程序员的恶性循环:加班-没空学习-老是写同等水平代码-无法提升代码质量-老是出BUG-老是需要修改-加班-......