hdu 1166 敌兵布阵--线段树

来源:互联网 发布:java移植游戏破解合集 编辑:程序博客网 时间:2024/05/16 00:27
/*线段树题这题很简单,但是老是Runtime Error(ACCESS_VIOLATION)一直找不到,就看着一老兄的,改我的代码一直把他的函数都搬过来了,还是那样就又把输入部分抄了过来,这才对了原来是处理'\n'的时候出的错但是在我的机器上一切正常其实可以无视'\n'或用" %s"空白字符处理*/#include<stdio.h>#include<string.h>struct node{int l,r,zhi;}e[200000];int num=1,SUM;char s[20];void jian(int i,int j,int no){int mid=(i+j)/2;e[no].l=i;e[no].r=j;e[no].zhi=0;if(i!=j){jian(i,mid,2*no);jian(mid+1,j,2*no+1);}}/*void make(int x,int y,int num)//别人的{e[num].l=x;e[num].r=y;if (x==y)e[num].zhi=r[y];else {make(x,(x+y)/2,num+num);make((x+y)/2+1,y,num+num+1);e[num].zhi=e[num+num].zhi+e[num+num+1].zhi;}}*/void cha(int i,int zhi,int no){int mid=(e[no].l+e[no].r)/2;e[no].zhi+=zhi;if(e[no].l==i&&e[no].r==i)return ;if(i<=mid)cha(i,zhi,2*no);else cha(i,zhi,2*no+1);}/*void add(int x,int y,int num)//别人的{e[num].zhi+=y;if (e[num].l==x && e[num].r==x)return;if (x>(e[num].l+e[num].r)/2)add(x,y,num+num+1);elseadd(x,y,num+num);}void sub(int x,int y,int num)//别人的{e[num].zhi-=y;if (e[num].l==x && e[num].r==x)return;if (x>(e[num].l+e[num].r)/2)sub(x,y,num+num+1);else sub(x,y,num+num);}*/int he(int i,int j,int no){int mid=(e[no].l+e[no].r)/2;if(i==e[no].l&&j==e[no].r)return e[no].zhi;if(j<=mid)return he(i,j,2*no);else if(i>mid)return he(i,j,2*no+1);elsereturn he(i,mid,2*no)+he(mid+1,j,2*no+1);}/*void que(int x,int y,int num)//别人的{if (x<=e[num].l && y>=e[num].r) SUM+=e[num].zhi;else {if (x>(e[num].l+e[num].r)/2)que(x,y,num+num+1);else if (y<=(e[num].l+e[num].r)/2)que(x,y,num+num);else {que(x,y,num+num);que(x,y,num+num+1);}}}*/int main(){int t,n,i,a,b;scanf("%d",&t);while(t--){scanf("%d",&n);jian(1,n,1);for(i=1;i<=n;i++){scanf("%d",&a);cha(i,a,1);}printf("Case %d:\n",num++);char c;/*c=getchar();//这个有没有无所谓*/while(scanf("%s",s)){if(strcmp(s,"End")==0)break;else if(strcmp(s,"Add")==0){scanf("%d%d",&a,&b);cha(a,b,1);/*c=getchar();//有这个就错了*/}else if(strcmp(s,"Sub")==0){scanf("%d%d",&a,&b);cha(a,-b,1);/*c=getchar();//有这个就错了*/}else{scanf("%d%d",&a,&b);printf("%d\n",he(a,b,1));/*c=getchar();//有这个就错了*/}}/*while (scanf(" %s",s)!=EOF)//别人的{if (strcmp(s,"End")==0) break;scanf("%d %d",&a,&b);if (strcmp(s,"Query")==0){SUM=0;printf ("%d\n",he(a,b,1));}else if (strcmp(s,"Add")==0)cha(a,b,1);else cha(a,-b,1);}*/}return 0;}

 
原创粉丝点击