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 |
Re:能帮我看看吗? 你们的数据我都过了,不过还是Wa!In Reply To:Re:能帮我看看吗? 你们的数据我都过了,不过还是Wa! Posted by:liulingling at 2009-08-10 15:04:20 +++++++++++++++++++++++++++++ > #include <stdio.h> > int L,T,Q; > struct Tree > { > int left; > int right; > int color; > }t[500000]; > int lone(int i) > { > return i&(i-1); > } > void f(int pos) > { > while(pos!=1) > { > int temp=pos; > if(pos%2==1)pos=(pos-1)/2; > else pos=pos/2; > t[pos].color=(t[pos*2+1].color)|(t[pos*2].color); > } > } > void build(int left,int right,int step) > { > t[step].left=left; > t[step].right=right; > t[step].color=1; > if(left==right)return ; > int mid=(left+right)/2; > build(left,mid,step*2); > build(mid+1,right,step*2+1); > } > void color(int left,int right,int step,int c) > { > int mid=(t[step].left+t[step].right)/2; > if(left<=t[step].left&&right>=t[step].right) > { > t[step].color=c; > f(step); > return ; > } > if(t[step].color==c)return ; > if(lone(t[step].color)==0) > { > t[step*2].color=t[step].color; > t[step*2+1].color=t[step].color; > } > if(mid>=right) > { > color(left,right,2*step,c); > } > else if(mid<left) > { > color(left,right,2*step+1,c); > } > else > { > color(left,mid,2*step,c); > color(mid+1,right,2*step+1,c); > } > t[step].color=t[step*2].color | t[step*2+1].color; > } > void search(int left,int right,int step,int &cnt) > { > int mid; > if(left<=t[step].left&&right>=t[step].right) > { > cnt|=t[step].color; > return; > } > mid=(t[step].left+t[step].right)/2; > if(mid>=right) > {search(left,right,step*2,cnt);} > else if(mid<left)search(left,right,step*2+1,cnt); > else > { > search(left,mid,2*step,cnt); > search(mid+1,right,2*step+1,cnt); > } > } > int count(int c)// 统计 > { > int i,cnt=0; > for(i=1;i<=30;i++) > { > int temp=c%2; > c/=2; > if(temp) > cnt++; > } > return cnt; > } > int main() > { > int a,b,c; > char ch; > scanf("%d %d %d",&L,&T,&Q); > build(1,L,1);//建树 > while(Q--) > { > getchar(); > scanf("%c",&ch); > if(ch=='C') > { > int p=1; > scanf("%d %d %d",&a,&b,&c); > if(a>b) > a^=b^=a^=b; > while(--c) > p*=2; > color(a,b,1,p);// 染色 > } > else > { > scanf("%d %d",&a,&b); > if(a>b) > a^=b^=a^=b; > int cnt=0; > search(a,b,1,cnt); > // printf("cnt : %d\n",cnt); > printf("%d\n",count(cnt)); > } > } > return 0; > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator