hdu3584(三维树状数组,区间修改,点查询)

来源:互联网 发布:如何清空手机数据 编辑:程序博客网 时间:2024/06/05 09:35

题目链接:点击打开链接

//hdu3584//题目大意:一个01的三维空间空间,两种操作:把一个区间的所有数取反,查询某个点的状态#include <iostream>#include <algorithm>#include <fstream>#include <sstream>#include <iomanip>#include <cstdio>#include <vector>#include <cstring>#include <cmath>#include <queue>#include <stack>#include <set>#include <map>#define L 110using namespace std;int c[L][L][L];int n, m;void add(int x, int y, int z, int d){for(int i= x; i<= n; i+= i&-i)for(int j= y; j<= n; j+= j&-j)            for(int k= z; k<= n; k+= k&-k)                c[i][j][k]+= d;}int sum(int x, int y, int z){int s= 0;for(int i= x; i> 0; i-= i&-i)for(int j= y; j> 0; j-= j&-j)            for(int k= z; k> 0; k-= k&-k)                s+= c[i][j][k];return s;}int main(){    while(scanf("%d%d", &n, &m)== 2)    {        memset(c, 0, sizeof(c));        while(m--)        {            int X; scanf("%d", &X);            if(X== 1)            {                int x1, y1, z1, x2, y2, z2;                scanf("%d%d%d%d%d%d", &x1, &y1, &z1, &x2, &y2, &z2); x2++; y2++; z2++;                add(x2, y2, z2, 1);                add(x1, y2, z2, 1);                add(x2, y1, z2, 1);                add(x2, y2, z1, 1);                add(x2, y1, z1, 1);                add(x1, y2, z1, 1);                add(x1, y1, z2, 1);                add(x1, y1, z1, 1);            }            if(X== 0)            {                int x, y, z; scanf("%d%d%d", &x, &y, &z);                printf("%d\n", sum(x, y, z)& 1);            }        }    }    return 0;}


阅读全文
0 0
原创粉丝点击