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在哪个细节了,我Check好几遍了。真心求指教#include <iostream> using namespace std; #define size 100001 struct seg_tree{ int l,r,color; }a[size*5]; bool bo[32]; void build(int i,int j,int k) { a[k].l=i; a[k].r=j; a[k].color=1; if (i==j) return ; int m=(i+j)/2; build(i,m,k*2); build(m+1,j,k*2+1); } void update(int i,int j,int w,int k) { if (a[k].l==i && a[k].r==j) { a[k].color=w; return ; } int m=(a[k].l+a[k].r)/2; if (j<=m) { if (a[k].color) { a[k*2].color=a[k].color; a[k*2+1].color=a[k].color; } update(i,j,w,k*2); a[k].color=0; } else if (i>m) { if (a[k].color) { a[k*2].color=a[k].color; a[k*2+1].color=a[k].color; } update(i,j,w,k*2+1); a[k].color=0; } else { if (a[k].color) { a[k*2].color=a[k].color; a[k*2+1].color=a[k].color; } update(i,m,w,k*2); update(m+1,j,w,k*2+1); a[k].color=0; } } int total; void query(int i,int j,int k) { int x; if (a[k].l<=i && a[k].r>=j) { if ((x=a[k].color) && !bo[x]) { total++; bo[x]=true; return ; } } if (a[k].l==a[k].r) return ; int m=(a[k].l+a[k].r)/2; if (j<=m) query(i,j,k*2); else if (i>m) query(i,j,k*2+1); else { query(i,m,k*2); query(m+1,j,k*2+1); } } void print(int k) { printf("(%d,%d)=%d\n",a[k].l,a[k].r,a[k].color); if (a[k].l==a[k].r) return ; print(k*2); print(k*2+1); } void swap(int &a,int &b) { int x=a; a=b; b=x; } int main() { freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); int l,t,e,a,b,c; char ch; scanf("%d%d%d",&l,&t,&e); build(1,l,1); while (e--) { cin>>ch; if (ch=='C') { scanf("%d%d%d",&a,&b,&c); if (a>b) swap(a,b); update(a,b,c,1); //print(1); printf("\n"); } else { scanf("%d%d",&a,&b); if (a>b) swap(a,b); total=0; memset(bo,0,sizeof(bo)); query(a,b,1); printf("%d\n",total); } } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator