POJ 2155 Matrix 二维树状数组 区间更新,单点查询
2017-10-20 12:28
267 查看
给出矩阵左上角和右下角坐标,矩阵里的元素 1变0 ,0 变1,然后给出询问,问某个点是多少
小技巧:1,0变换,我们不停地+1即可,最后%2输出。
这道题是二维树状数组的题目
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#define N 1040
#define ll long long
using namespace std;
int n;
int bit
;
int sum(int i,int j) {
int s=0;
while(i>0) {
int jj=j;
while(jj>0) {
s+=bit[i][jj];
jj-=jj&-jj;
}
i-=i&-i;
}
return s;
}
void add(int i,int j,int x) {
while(i<=n) {
int jj=j;
while(jj<=n) {
bit[i][jj]+=x;
jj+=jj&-jj;
}
i+=i&-i;
}
}
int main() {
freopen("test.in","r",stdin);
int t;
cin>>t;
while(t--) {
int q;
scanf("%d%d ",&n,&q);
memset(bit,0,sizeof bit);
char c;
int x,y,x1,y1;
while(q--) {
scanf("%c",&c);
if(c=='C') {
scanf("%d%d%d%d",&x,&y,&x1,&y1);
add(x,y,1);
add(x,y1+1,-1);
add(x1+1,y,-1);
add(x1+1,y1+1,1);
} else {
scanf("%d%d",&x,&y);
printf("%d\n",sum(x,y)%2);
}
getchar();
}
if(t)printf("\n");
}
return 0;
}
小技巧:1,0变换,我们不停地+1即可,最后%2输出。
这道题是二维树状数组的题目
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#define N 1040
#define ll long long
using namespace std;
int n;
int bit
;
int sum(int i,int j) {
int s=0;
while(i>0) {
int jj=j;
while(jj>0) {
s+=bit[i][jj];
jj-=jj&-jj;
}
i-=i&-i;
}
return s;
}
void add(int i,int j,int x) {
while(i<=n) {
int jj=j;
while(jj<=n) {
bit[i][jj]+=x;
jj+=jj&-jj;
}
i+=i&-i;
}
}
int main() {
freopen("test.in","r",stdin);
int t;
cin>>t;
while(t--) {
int q;
scanf("%d%d ",&n,&q);
memset(bit,0,sizeof bit);
char c;
int x,y,x1,y1;
while(q--) {
scanf("%c",&c);
if(c=='C') {
scanf("%d%d%d%d",&x,&y,&x1,&y1);
add(x,y,1);
add(x,y1+1,-1);
add(x1+1,y,-1);
add(x1+1,y1+1,1);
} else {
scanf("%d%d",&x,&y);
printf("%d\n",sum(x,y)%2);
}
getchar();
}
if(t)printf("\n");
}
return 0;
}
相关文章推荐
- POJ - 2155 Matrix(二维线段树、区间更新单点查询)
- poj 2155 第一天学树状数组,还没怎么搞清楚二维的区间更新单点查询
- poj 2155 二维树状数组/区间更新单点查询
- POJ 2155 Matrix(二维树状数组+数组数组区间更新+单点查询)
- poj 2155(二维树状数组,区间更新,单点查询)
- poj2155-二维树状数组 区间更新 单点查询
- POJ 2155 Matrix (二维线段树入门,成段更新,单点查询 / 二维树状数组,区间更新,单点查询)
- POJ 2155 - Matrix 二维树状数组..区间更新..单点查询
- 01变换 二维树状数组+区间更新,单点查询 poj 2155 Matrix
- POJ 3237 Tree(树链剖分 + 单点更新 + 区间更新 + 区间查询)
- poj 2155- Matrix (树状数组,二维,更新区间,查询单点)
- !POJ 2352 左下角星星-线段树-(单点更新,区间查询)
- POJ 2155-Matrix(二维树状数组-区间修改 单点查询)
- POJ - 2155 Matrix 二维树状数组(区间更新,点查询)
- poj--3067 Japan(线段树+单点更新区间查询)
- Matrix (POJ - 2155 )(树状数组的区间更新-点查询)
- POJ - 2155 Matrix (二维树状数组 + 区间修改 + 单点求值 或者 二维线段树 + 区间更新 + 单点求值)
- POJ 1195 - Mobile phones 二维树状数组(单点更新..区间查询)
- POJ 题目2892 Tunnel Warfare(线段树单点更新查询,求单点所在最大连续区间长度)
- poj 2155 Matrix 树状数组 区间更新单点求值