poj3321 树状数组
2013-04-03 22:15
281 查看
这几天在看杭电马拉松的题,我都无语啦,其中有一个是晒被子的问题,我看了大牛的思路然后写的超时了,然后我看了别人的代码,结果一直WA,后来几乎代码改了一样的但还是WA,后来找了一晚上的错误,然后发现了大牛的代码是在g++环境中运行的,而我用的是VC++编译器,然后就是对max()的这个函数他的是库函数而我的是自己写的,而错误就在这里,我都被这些弄糊涂了,结果我的一直还是没有过,脑袋大了!
对于这道题,我又犯了一个想投机取巧的错误,就是像建立树来着,那是没有考虑特殊情况,TLE了,后来看了别人的建立树状数组,几乎看了别人的代码的。。。
对于这道题,我又犯了一个想投机取巧的错误,就是像建立树来着,那是没有考虑特殊情况,TLE了,后来看了别人的建立树状数组,几乎看了别人的代码的。。。
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<queue> #include<stack> #include<vector> #include<climits> using namespace std; #define ll __int64 #define rep(i,n) for(i=0; i<(n); i++) #define reph(i,n,m) for(i=(n); i<=(m); i++)//正循环的 #define repd(i,n,m) for(i=(n); i>=(m); i--) //负循环的 #define fab(a) (a)>0?(a):0-(a) #define arc(a) (a)*(a) #define inf 10000000 //最大值的 #define exp 0.0000001 //浮点型的 #define N 100010 typedef struct fun { int y; int pre; }rr; typedef struct point { int low,high; }ee; point b ; fun a ; int sum ; int pre ; int n,m,len; bool flag ; int lowbit(int i) { return i&(-i); } void init() { int i; reph(i,1,n) sum[i]=lowbit(i); } void addpage(int x,int y) { a[len].y=y; a[len].pre=pre[x]; pre[x]=len++; } void dfs(int i)//代表的是父亲的节点的下标的 { b[i].low=len;//记录开始的时候的 int j; for(j=pre[i];j!=0; j=a[j].pre) { dfs(a[j].y); } b[i].high=len++;//记录结束的结点的 } void update(int i) { int x; if(flag[i]==true) { x=-1; flag[i]=false; } else { x=1; flag[i]=true; } for(;i<=n; i+=lowbit(i)) sum[i]+=x; } int Sum(int i) { int m=0; for(;i>0;i-=lowbit(i)) m+=sum[i]; return m; } int main() { int x,y,m,i; while(scanf("%d",&n)!=EOF) { len=1; memset(pre,0,sizeof(pre)); memset(sum,0,sizeof(sum)); memset(flag,true,sizeof(flag));//代表树是空或者有苹果的 rep(i,n-1) { scanf("%d%d",&x,&y); addpage(x,y); //存储的 } len=1;//用来标记的 dfs(1);//进行建立位置的 init();//对sum进行操作的 scanf("%d",&m); char c; int s; while(m--) { getchar(); c=getchar(); scanf("%d",&s); if(c=='Q') { // printf("%d %d\n",b[s].high,b[s].low); printf("%d\n",Sum(b[s].high)-Sum(b[s].low-1)); } else { update(b[s].high);//开始的结点的 } } } return 0; }
相关文章推荐
- poj3321---树状数组
- POJ3321 树状数组(细节问题)
- poj3321之将树转化为一维树状数组
- Apple Tree(POJ3321)(树状数组)
- poj3321 Apple Tree(DFS+树状数组)
- [poj3321]Apple Tree_dfs序_树状数组
- [jzoj1016][poj3321]苹果树(dfs序+树状数组维护)
- POJ3321——树状数组_POJ树状数组初探
- 【POJ3321】Apple Tree-DFS+树状数组维护
- POJ3321 Apple Tree(DFS序 + 树状数组)
- (POJ3321)Apple Tree <dfs序列 树状数组>
- poj3321 树状数组
- POJ3321(dfs序列+树状数组)
- 【POJ3321】Apple Tree(DFS序,树状数组)
- [POJ3321] Apple Tree 苹果树 - 树状数组
- poj3321 树状数组
- POJ3321——树状数组_POJ树状数组初探
- poj3321 图+树状数组
- 树状数组模板
- Codeforces 301D (顺序统计+树状数组)