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 |
我用的线段树,为什么会tle啊my code,please help me /*pku 2777*/ #include<stdio.h> #define N 100005 struct TREE { int color,l,r,mid; }tree[N*4+1000]; int l,t,o; int a,b,d; void creat(int s,int e,int p) { int mid; mid=(s+e)>>1; tree[p].l=s,tree[p].r=e; tree[p].mid=mid; tree[p].color=1; if(s==e) return; creat(s,mid,p*2); creat(mid+1,e,p*2+1); } void insert(int s,int e,int c,int p) { if(tree[p].r==tree[p].l)/*******/ { tree[p].color=1<<(c-1);/**********/ return; } if(e<=tree[p].mid) insert(s,e,c,p*2); else if(s>tree[p].mid) insert(s,e,c,p*2+1); else { insert(s,tree[p].mid,c,p*2); insert(tree[p].mid+1,e,c,p*2+1); } tree[p].color=tree[p*2].color|tree[p*2+1].color; /*if(tree[p*2].color!=1) printf("fff%d %d %d\n",tree[p].color,tree[p*2].color,tree[p*2+1].color);*/ } int get(int s,int e,int p) { if(s==tree[p].l&&e==tree[p].r) return tree[p].color; if(e<=tree[p].mid) return get(s,e,p*2); else if(s>tree[p].mid) return get(s,e,p*2+1); else return get(s,tree[p].mid,p*2)|get(tree[p].mid+1,e,p*2+1); } void change() { int temp; temp=a; a=b; b=temp; } int main() { char s[3]; int ii; int temp,time; while(scanf("%d %d %d",&l,&t,&o)!=EOF) { creat(1,l,1); for(ii=0;ii<o;ii++) { scanf("%s",s); switch(s[0]) { case 'C':scanf("%d %d %d",&a,&b,&d); if(a>b) change(); insert(a,b,d,1); break; case 'P':scanf("%d %d",&a,&b); if(a>b) change(); temp=get(a,b,1); /*printf("%d\n",temp);*/ time=0; while(temp) { if(temp%2) time++; temp>>=1; } printf("%d\n",time); } } } return 1; } /* 2 2 4 C 1 1 2 P 1 2 C 2 2 2 P 1 2 */ Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator