| ||||||||||
Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
顶一下,非常想弄清楚线段树,请诸位帮个忙In Reply To:第一个线段树程序就不知道哪里错了,麻烦诸位大牛帮帮忙,谢谢。 Posted by:hhhh at 2006-08-28 17:02:32 > #include<iostream.h> > > int B[400002],E[400002],C[400002]; //分别表示线段起点,终点,线段内1的个数 > int person[200000][2]; //进入队中的人 > int result[200001]; //结果序列 > > void Init(int begin,int end,int v) //初始化线段树 > { > if(begin==end) //叶子 > { > B[v]=begin; > E[v]=end; > C[v]=1; > } > else > { > B[v]=begin; > E[v]=end; > C[v]=end-begin+1; > Init(begin,(begin+end)/2,2*v); > Init((begin+end)/2+1,end,2*v+1); > } > } > > void change(int count,int value,int v) //用每个进入队伍的人调整线段树 > { > C[v]--; > if(B[v]==E[v]) > { > result[B[v]]=value; > return; > } > if(C[2*v]>count) > { > change(count,value,2*v); > } > else > { > change(count-C[2*v],value,2*v+1); > } > } > int main() > { > int n,i; > while(cin>>n) > { > Init(1,n,1); > for(i=0;i<n;i++) > { > cin>>person[i][0]>>person[i][1]; > } > for(i=n-1;i>=0;i--) > { > change(person[i][0],person[i][1],1); > } > for(i=1;i<n;i++) > { > cout<<result[i]<<' '; > } > cout<<result[i]<<endl; > } > return 0; > } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator