POJ2155 Matrix 二维树状数组
来源:互联网 发布:米表源码 编辑:程序博客网 时间:2024/04/27 11:28
题目链接:http://poj.org/problem?id=2155
题目大意:N * N 的矩阵,每个元素要么是0,要么是1,开始全0不断进行两种操作:
(1)C x1 y1 x2 y2 表示要将左上角为(x1,y1),右下角为(x2,y2)的子矩阵里的全部元素都取反(0变1,1变0)(1<=x1<=x2<=n,1<=y1<=y2<=n);
(2)Q x y 查询(x,y)处元素的值。
分析:HDU3584 Cube的简化版,那个是三维的,这个是二维的,不过做法都是一样的,用树状数组来记录每个区间的变化的次数,然后查询的时候,该点的变化次数对2取模,就是最终的结果了。更新的时候用到容斥原理。
实现代码如下:
#include <cstdio>#include <cstring>using namespace std;const int M=1001;int a[M][M],n;int lowbit(int i){ return i&(-i);}void update(int x,int y){ for(int i=x;i<=n;i+=lowbit(i)) for(int j=y;j<=n;j+=lowbit(j)) a[i][j]++;}int query(int x,int y){ int sum=0; for(int i=x;i>0;i-=lowbit(i)) for(int j=y;j>0;j-=lowbit(j)) sum+=a[i][j]; return sum;}int main(){ int t,m,x,y; char op[5]; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); memset(a,0,sizeof(a)); while(m--) { scanf("%s%d%d",op,&x,&y); if(op[0]=='Q') printf("%d\n",query(x,y)&1); else { int x1,y1; scanf("%d%d",&x1,&y1); update(x,y); update(x,y1+1); update(x1+1,y); update(x1+1,y1+1); } } printf("\n"); } return 0;}
0 0
- poj2155--Matrix--二维树状数组
- POJ2155 Matrix(二维树状数组)
- poj2155 Matrix 【二维树状数组】
- poj2155~Matrix~二维树状数组!
- POJ2155 Matrix 二维树状数组
- poj2155 Matrix 【二维树状数组】
- 【poj2155】【二维树状数组】Matrix
- poj2155 Matrix 二维树状数组
- [POJ2155] Matrix - 二维树状数组
- 【POJ2155】Matrix(二维树状数组)
- POJ2155-Matrix-二维树状数组
- poj2155 Matrix 二维树状数组
- poj2155 Matrix 二维树状数组
- POJ2155-二维树状数组-Matrix
- POJ2155--Matrix::二维树状数组
- POJ2155--Matrix(二维树状数组)
- POJ2155 Matrix 二维树状数组的应用
- POJ2155 Matrix (二维树状数组)
- iOS中 KVO 键值观察者
- 林达华:Computer Vision的尴尬
- linux命令概论
- 几个字符串匹配算法
- KMP算法
- POJ2155 Matrix 二维树状数组
- [数据结构]字符串匹配(KMP方法)
- 软工文档简介
- MongoDb 的 MMAPv1 和 WiredTiger 存储引擎空间对比(800万文档 )
- 软件工程之软件维护
- Understanding the differences between client/server and peer-to-peer networks
- QTP中的Action有什么作用?有几种?
- DataInputStream和DataOutputStream
- codevs售货员的难题 —— 状态压缩动态规划[四星]