我是靠谱客的博主 斯文心情,最近开发中收集的这篇文章主要介绍http://acm.hdu.edu.cn/showproblem.php?pid=3584,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

三维树状数组的一个模板题。。应该是属于插线问点这一类型的。。。

题意:一开始三维数组的元素都为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("%dn",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; }

最后

以上就是斯文心情为你收集整理的http://acm.hdu.edu.cn/showproblem.php?pid=3584的全部内容,希望文章能够帮你解决http://acm.hdu.edu.cn/showproblem.php?pid=3584所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部