HOJ 2686 Magic-Box
[cpp]
#include <stdio.h>
#include <cstring>
const int maxn=202;
int c[maxn][maxn][maxn];
inline int lowbit(int x)
{
return x&(-x);
}
void update(int x,int y,int z,int p)
{
for(int i=x; i<maxn; i+=lowbit(i))
for(int j=y; j<maxn; j+=lowbit(j))
for(int k=z; k<maxn; k+=lowbit(k))
c[i][j][k]+=p;
}
int sum(int x,int y,int z)
{
int ans=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))
ans+=c[i][j][k];
return ans;
}
int main()
{
int t,x1,x2,y1,y2,z1,z2,p;
char op[10];
while(scanf("%d",&t)==1)
{
memset(c,0,sizeof(c));
while(t--)
{
scanf(" %s",op);
if(op[0]=='A')
{
scanf("%d%d%d%d%d%d%d",&x1,&y1,&z1,&x2,&y2,&z2,&p);
update(x2+1,y2+1,z2+1,-p);
update(x2+1,y1,z2+1,p);
update(x1,y2+1,z2+1,p);
update(x2+1,y2+1,z1,p);
update(x1,y1,z2+1,-p);
update(x2+1,y1,z1,-p);
update(x1,y2+1,z1,-p);
update(x1,y1,z1,p);
}
else if(op[0]=='Q')
{
scanf("%d%d%d",&x1,&y1,&z1);
printf("%d\n",sum(x1,y1,z1));
}
}
}
return 0;
}
补充:软件开发 , C++ ,