http://acm.hdu.edu.cn/showproblem.php?pid=3584

1462 단어
3 차원 트 리 배열 의 템 플 릿 문제플러그 인 포인트 라 는 유형 에 속 할 것 같은 데...
제목: 처음에 3 차원 배열 의 요 소 는 모두 0 이 었 습 니 다. 입력 작업 이 1 일 때 1 - > 0 또는 0 - > 1. 여러 번 조작 한 후에 이 위 치 는 1 이 냐 0 이 냐 고 물 었 습 니 다.
#include<iostream>
#include<cstdio>
#include<string.h>
#include<algorithm>
#include<assert.h>
#define N 101
using namespace std;
int s[N][N][N];
int lowbit(int x)
{return x&(-x);}
void update(int x,int y,int z)
{ for(int i=x;i<N;i+=lowbit(i))
   for(int j=y;j<N;j+=lowbit(j))
	 for(int k=z;k<N;k+=lowbit(k))
		 s[i][j][k]++;
}
int Quary(int x,int y,int z)
{ int sum=0;
   for(int i=x;i>0;i-=lowbit(i))
   for(int j=y;j>0;j-=lowbit(j))
   for(int k=z;k>0; k-=lowbit(k))
		sum+=s[i][j][k];
   return sum;
 }
int main()
{ int  n,m;
   while(~scanf("%d%d",&n,&m))
   {   int flag;
       int x1,y1,z1,x2,y2,z2;
	   memset(s,0,sizeof(s));
	   while(m--)
     {    scanf("%d",&flag);
	    
	   if(flag==0)
	   {   scanf("%d%d%d",&x1,&y1,&z1);
		   printf("%d
",Quary(x1,y1,z1)%2); } else { scanf("%d%d%d%d%d%d",&x1,&y1,&z1,&x2,&y2,&z2); update(x1,y1,z1); update(x1,y1,z2+1); update(x1,y2+1,z1); update(x1,y2+1,z2+1); update(x2+1,y1,z1); update(x2+1,y2+1,z1); update(x2+1,y1,z2+1); update(x2+1,y2+1,z2+1); } } }return 0; }

좋은 웹페이지 즐겨찾기