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 |
RE了很多次 不知道是什么原因 大牛们帮我找一下吧 谢谢谢#pragma warning (disable:4786) #include <iostream> #include <stdio.h> #include <string> #include <string.h> #include <stdlib.h> #include <algorithm> #include <vector> #include <map> #include <math.h> #include <queue> #include <stack> #include <list> #include <deque> #include <set> #include <numeric> #include <functional> #include <ctype.h> #include <utility> #include <cassert> #include <time.h> using namespace std; #define Maxn 1000001 map<int,int>c; int ans; struct node { int l,r; int color[32]; int sum; int cover; node() { memset(color,0,sizeof(color)); } }T[Maxn*4]; void Build(int l,int r,int root) { T[root].l=l; T[root].r=r; T[root].cover=1; T[root].color[1]=1; if(l==r) { return; } if(l<r) {int Mid=(l+r)/2; Build(l,Mid,root*2); Build(Mid+1,r,root*2+1); } } void add(int l,int r,int w,int root) { int i; if(T[root].cover) { int ww; for(i=1;i<32;i++) if(T[root].color[i]) { ww=i; break; } for(i=1;i<32;i++) { T[root*2].color[i]=0; T[root*2+1].color[i]=0; } T[root*2].color[ww]=1; T[root*2+1].color[ww]=1; T[root*2].cover=1; T[root*2+1].cover=1; } if(T[root].l==l&&T[root].r==r) { for(i=1;i<32;i++) if(T[root].color[i]) T[root].color[i]=0; T[root].color[w]=1; T[root].cover=1; return; } if(T[root].l<T[root].r) {int Mid=(T[root].l+T[root].r)/2; if(r<=Mid) add(l,r,w,root*2); else if(l>Mid) add(l,r,w,root*2+1); else { add(l,Mid,w,root*2); add(Mid+1,r,w,root*2+1); }} int t=0; for(i=1;i<32;i++) { T[root].color[i]=0; if(T[root*2].color[i]||T[root*2+1].color[i]) { T[root].color[i]=1; t++; } } if(t==1&&T[root*2].cover&&T[root*2+1].cover) T[root].cover=1; else T[root].cover=0; } void querysum(int l,int r,int root) { int i; if(T[root].cover) { for(i=1;i<32;i++) if(T[root].color[i]&&!c[i]) { ans++; c[i]=1; } return; } if(T[root].l==l&&T[root].r==r) { for(i=1;i<32;i++) { // printf("clolor=%d,c[i]=%d\n",T[root].color[i],c[i]); if(T[root].color[i]&&!c[i]) { c[i]=1; ans++; }} return; } if(T[root].l<T[root].r) {int Mid=(T[root].l+T[root].r)/2; if(r<=Mid) querysum(l,r,root*2); else if(l>Mid) querysum(l,r,root*2+1); else { querysum(l,Mid,root*2); querysum(Mid+1,r,root*2+1); }} } int main() { int n,m,o,i,x,y,z; char s[2]; scanf("%d%d%d",&n,&m,&o); Build(1,n,1); while(o--) { scanf("%s",s); if(s[0]=='P') { scanf("%d%d",&x,&y); if(x>y) { i=x; x=y; y=i; } ans=0; c.clear(); querysum(x,y,1); //printf("%d %d %d %d\n",T[1].color[9],T[1].color[10],T[1].color[9],T[1].color[10]); //printf("%d\n",T[7].cover); printf("%d\n",ans); } else if(s[0]=='C') { scanf("%d%d%d",&x,&y,&z); if(x>y) { i=x; x=y; y=i; } add(x,y,z,1); // printf("%d\n",T[1].color[2]); } } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator