题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3584

 

Problem Description

Given an N*N*N cube A, whose elements are either 0 or 1. A[i, j, k] means the number in the i-th row , j-th column and k-th layer. Initially we have A[i, j, k] = 0 (1 <= i, j, k <= N). 
We define two operations, 1: “Not” operation that we change the A[i, j, k]=!A[i, j, k]. that means we change A[i, j, k] from 0->1,or 1->0. (x1<=i<=x2,y1<=j<=y2,z1<=k<=z2).
0: “Query” operation we want to get the value of A[i, j, k].

Input

Multi-cases.
First line contains N and M, M lines follow indicating the operation below.
Each operation contains an X, the type of operation. 1: “Not” operation and 0: “Query” operation.
If X is 1, following x1, y1, z1, x2, y2, z2.
If X is 0, following x, y, z.

Output

For each query output A[x, y, z] in one line. (1<=n<=100 sum of m <=10000) 

Sample Input

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

Sample Output

1

0

1

 

 1 /*AC代码*/
 2 #include<iostream>
 3 #include<cstdio>
 4 #include<cstring>
 5 
 6 using namespace std;
 7 
 8 const int N=110;
 9 
10 int n,m,arr[N][N][N];
11 
12 int lowbit(int x)
13 {
14     return x&(-x);
15 }
16 
17 void update(int i,int j,int k,int val)
18 {
19     while(i<=n)
20     {
21         int tmpj=j;
22         while(tmpj<=n)
23         {
24             int tmpk=k;
25             while(tmpk<=n)
26             {
27                 arr[i][tmpj][tmpk]+=val;
28                 tmpk+=lowbit(tmpk);
29             }
30             tmpj+=lowbit(tmpj);
31         }
32         i+=lowbit(i);
33     }
34 }
35 
36 int Sum(int i,int j,int k)
37 {
38     int ans=0;
39     while(i>0)
40     {
41         int tmpj=j;
42         while(tmpj>0)
43         {
44             int tmpk=k;
45             while(tmpk>0)
46             {
47                 ans+=arr[i][tmpj][tmpk];
48                 tmpk-=lowbit(tmpk);
49             }
50             tmpj-=lowbit(tmpj);
51         }
52         i-=lowbit(i);
53     }
54     return ans;
55 }
56 
57 int main()
58 {
59 
60     //freopen("input.txt","r",stdin);
61 
62     while(~scanf("%d%d",&n,&m))
63     {
64         memset(arr,0,sizeof(arr));
65         int x1,y1,z1,x2,y2,z2;
66         int op;
67         while(m--)
68         {
69             scanf("%d",&op);
70             if(op==1)
71             {
72                 scanf("%d%d%d%d%d%d",&x1,&y1,&z1,&x2,&y2,&z2);
73                 update(x2+1, y2+1, z2+1, 1);
74                 update(x1, y2+1, z2+1, 1);
75                 update(x2+1, y1, z2+1, 1);
76                 update(x2+1, y2+1, z1, 1);
77                 update(x1, y1, z2+1, 1);
78                 update(x2+1, y1, z1, 1);
79                 update(x1, y2+1, z1, 1);
80                 update(x1, y1, z1, 1);
81             }
82             else
83              {
84                 scanf("%d%d%d",&x1,&y1,&z1);
85                 printf("%d\n",Sum(x1,y1,z1)&1);  
86   //该点的值就是sum(x,y)
87             }
88         }
89     }
90     return 0;
91 }
View Code

相关文章:

  • 2021-09-18
  • 2021-07-28
  • 2021-06-24
  • 2022-12-23
  • 2022-01-25
  • 2022-12-23
  • 2022-12-23
  • 2021-12-01
猜你喜欢
  • 2021-08-04
  • 2021-05-19
  • 2021-08-26
  • 2021-09-21
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案