C++-POJ2155-Matrix

二维树状数组+叉分

区间修改转化为单点修改

单点查询本来就可视为区间查询

于是本题可解

PS:不知道为什么函数传参数,传的是变量就会出现奇奇怪怪的问题?

所以读入单独写了,还有就是循环的初始化硬是多定义了一组变量,头大啊!

暂且把这种写法视为标准写法吧!

#include <set>
#include <map>
#include <cmath>
#include <queue>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN=1001;
int t[MAXN][MAXN],n;
int lb(int i){return i&-i;}
void init(){memset(t,0,sizeof(t));}
void add(int x,int y,int v){
    for(int i=x;i<=n;i+=lb(i))for(int j=y;j<=n;j+=lb(j))t[i][j]+=v;
}
int sum(int x,int y){
    int ans=0;for(int i=x;i;i-=lb(i))for(int j=y;j;j-=lb(j))ans+=t[i][j];return ans;
}
int a,b,c,d,x,T;char s[5];
void C(){cin>>a>>b>>c>>d;add(a,b,1),add(c+1,b,1),add(a,d+1,1),add(c+1,d+1,1);}
void Q(){cin>>a>>b;cout<<sum(a,b)%2<<endl;}

int main(){
    for(scanf("%d",&x);x--;x?puts(""):0){
        scanf("%d%d",&n,&T),init();
        while(T--)scanf("%s",s),s[0]=='C'?C():Q();
    }
}

猜你喜欢

转载自www.cnblogs.com/JasonCow/p/12290699.html
今日推荐