Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)
Total Submission(s): 660 Accepted Submission(s): 309
2 5 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 2 2 2 0 1 1 1 0 2 2 2
1 0 1
#include <iostream> #include <stdio.h> #include <memory.h> using namespace std; int a[105][105][105], n; int lowbit(int i) { return i&(-i); } void update(int i, int j, int k, int x) //三维树状数组更新 { int tj, tk; while(i <= n) { tj = j; while(tj <= n) { tk = k; while(tk <= n) { a[i][tj][tk] += x; tk += lowbit(tk); } tj += lowbit(tj); } i += lowbit(i); } } int sum(int i, int j, int k) //三维树状数组求和 { int tj, tk, sum = 0; while(i > 0) { tj = j; while(tj > 0) { tk = k; while(tk > 0) { sum += a[i][tj][tk]; tk -= lowbit(tk); } tj -= lowbit(tj); } i -= lowbit(i); } return sum; } int main() { int t, k; int x1, y1, z1, x2, y2, z2; while(scanf("%d %d", &n, &t) != EOF) { memset(a, 0, sizeof(a)); while(t--) { scanf("%d", &k); if(k == 0) { scanf("%d%d%d", &x1, &y1, &z1); printf("%d\n", sum(x1, y1, z1)&1); } else if(k == 1) { scanf("%d%d%d%d%d%d", &x1, &y1, &z1, &x2, &y2, &z2); ///三维树状数组更新-容斥原理 update(x2+1, y2+1, z2+1, 1); update(x1, y2+1, z2+1, 1); update(x2+1, y1, z2+1, 1); update(x2+1, y2+1, z1, 1); update(x1, y1, z2+1, 1); update(x2+1, y1, z1, 1); update(x1, y2+1, z1, 1); update(x1, y1, z1, 1); } } } return 0; }