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 |
为什么我的代码一直WA 求大牛指点#include <iostream> using namespace std; struct tree{ int left; int right; int color; }T[300005]; int ans; bool colors[35]; void BT(int r,int a,int b){ T[r].left=a; T[r].right=b; T[r].color=1; if(a==b) return ; int mid=(a+b)>>1; BT(2*r,a,mid); BT(2*r+1,mid+1,b); } void insert(int r,int a,int b,int c){ if(T[r].left==a &&T[r].right==b ){ T[r].color=c; return ; } if(T[r].color!=c){ if(T[r].color){ T[2*r].color=T[r].color; T[2*r+1].color=T[r].color; T[r].color=0; } } else{ return ; } int mid=(T[r].left+T[r].right)>>1; if(b<=mid){ insert(2*r,a,b,c);// } else { if(a>mid){ insert(2*r+1,a,b,c);// } else{ insert(2*r,a,mid,c); insert(2*r+1,mid+1,b,c); } } } void visit(int r,int a,int b){ if(T[r].left==a && T[r].right==b && T[r].color){ if(colors[T[r].color]){ ans++; colors[T[r].color]=false; } return ; } int mid=(T[r].left+T[r].right)>>1; if(b<=mid){ visit(2*r,a,b); } else{ if(a>mid){ visit(2*r+1,a,b); } else{ visit(2*r,a,mid); visit(2*r+1,mid+1,b); } } } int main(){ int t,n,o,a,b,c,max,min; char x; while(scanf("%d%d%d",&n,&t,&o)!=EOF){ BT(1,1,n); while(o--){ scanf("%c%c",&x,&x); if(x=='C'){ scanf("%d%d%d",&a,&b,&c); max=a>b?a:b; min=a<b?a:b; insert(1,min,max,c); } else{ scanf("%d%d",&a,&b); max=a>b?a:b; min=a<b?a:b; ans=0; memset(colors,true,sizeof(colors)); visit(1,min,max); printf("%d\n",ans); } } } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator