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 |
真气人 a可以大于b#include<stdio.h> typedef struct { __int64 flash,m; }node; node tree[10*100000]; __int64 cnt; void ok(__int64 l,__int64 r,__int64 nu) { if(tree[nu].flash) { tree[nu*2].flash=1; tree[nu*2+1].flash=1; tree[nu*2].m=tree[nu].m; tree[nu*2+1].m=tree[nu].m; tree[nu].flash=0; } } void update(__int64 l,__int64 r,__int64 L,__int64 R,__int64 nu,__int64 m) { if(l==L&&r==R) { tree[nu].flash=1; tree[nu].m=1<<(m-1); return ; } ok(l,r,nu); __int64 mid=(l+r)/2; if(mid>=R) update(l,mid,L,R,2*nu,m); else if(mid<L) update(mid+1,r,L,R,2*nu+1,m); else update(l,mid,L,mid,2*nu,m),update(mid+1,r,mid+1,R,2*nu+1,m); tree[nu].m=tree[nu*2].m|tree[nu*2+1].m; } void query(__int64 l,__int64 r,__int64 L,__int64 R,__int64 nu) { if(l==L&&r==R) { cnt|=tree[nu].m; return ; } ok(l,r,nu); __int64 mid=(l+r)/2; if(R<=mid) query(l,mid,L,R,2*nu); else if(mid<L) query(mid+1,r,L,R,2*nu+1); else query(l,mid,L,mid,2*nu),query(mid+1,r,mid+1,R,2*nu+1); } int main() { __int64 l,t,o,a,b,c; char s; while(~scanf("%I64d%I64d%I64d",&l,&t,&o)) { tree[1].flash=1; tree[1].m=1; while(o--) { getchar(); scanf("%c",&s); if(s=='C') { scanf("%I64d%I64d%I64d",&a,&b,&c); if(a>b) { int t=a; a=b; b=t; } update(1,l,a,b,1,c); } else { scanf("%I64d%I64d",&a,&b); cnt=0; if(a>b) { int t=a; a=b; b=t; } query(1,l,a,b,1); int sum=0; for(int i=0;i<t;i++) if(cnt&(1<<i)) sum++; printf("%I64d\n",sum); } } } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator