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 |
来晒代码#include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #define maxn 100005 #define maxl 100005 #define maxc 31 #define maxlongint ((1<<31)-1) struct treenode{ int l,r,lch,rch,col; }tree[maxn+maxn+maxn]; int n,m,t,s,tot=0,u,v,w; int buildtree(int a,int b){ int now=++tot; tree[now].l=a,tree[now].r=b,tree[now].col=1; if(a+1<b){ tree[now].lch=tot+1,buildtree(a,((a+b)>>1)); tree[now].rch=tot+1,buildtree(((a+b)>>1),b); } return 0; } int modify(int t,int a,int b,int c){ if((b<=tree[t].l)||(a>=tree[t].r)) return 0; if((a<=tree[t].l)&&(b>=tree[t].r)) return tree[t].col=c,0; if(tree[t].col==c) return 0; if(((tree[t].col)&(tree[t].col-1))==0) tree[tree[t].lch].col=tree[tree[t].rch].col=tree[t].col; if(a<=tree[tree[t].lch].r) modify(tree[t].lch,a,b,c); if(b>=tree[tree[t].rch].l) modify(tree[t].rch,a,b,c); return tree[t].col=(tree[tree[t].lch].col)|(tree[tree[t].rch].col),0; } int query(int t,int a,int b){ if((b<=tree[t].l)||(a>=tree[t].r)) return 0; if(((a<=tree[t].l)&&(b>=tree[t].r))||(((tree[t].col)&(tree[t].col-1))==0)) return tree[t].col; int ans=0; if(a<=tree[tree[t].lch].r) ans=query(tree[t].lch,a,b); if(b>=tree[tree[t].rch].l) ans=(ans)|(query(tree[t].rch,a,b)); return ans; } int main(){ scanf("%d%d%d\n",&n,&t,&m); buildtree(0,n); for(char ch;m>0;m--){ scanf("%c ",&ch); if(ch=='C'){ scanf("%d%d%d\n",&u,&v,&w); if(u>v) u=u^v,v=u^v,u=u^v; modify(1,u-1,v,(1<<(w-1))); } if(ch=='P'){ scanf("%d%d\n",&u,&v); w=query(1,u-1,v); for(s=0;w>0;w/=2) s+=(w&1); printf("%d\n",s); } } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator