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,晒晒我的代码,线段树做的,哪位大侠指教一二~#include <iostream> //#include <windows.h> using namespace std; const int inf=(int)1e7+1; struct poster { int left,right,a,b,size,dad;bool cov; }post[inf/10],null; int p; int search(int a,int b,int k,int f,int fat) { int fa,fb,fc,mi; if(post[k].cov) return 0; if(k==0) { post[p]=null,fa=post[fat].a,fb=post[fat].b,post[p].dad=fat,fc=(fa+fb)/2; if(f) post[p].a=fa,post[p].b=fc,post[fat].left=p; else post[p].a=fc+1,post[p].b=fb,post[fat].right=p; k=p,p++; } if(a==post[k].a&&b==post[k].b) { if(post[k].cov) return 0; post[k].cov=1; for(fa=post[k].dad;;fa=post[fa].dad) if(post[post[fa].left].cov&&post[post[fa].right].cov) post[fa].cov=1; else break; if(post[k].size==0) post[k].size=1; return 1; } mi=(post[k].a+post[k].b)/2; if(b<=mi) post[k].size+=(fa=search(a,b,post[k].left,1,k)); else if(a>mi) post[k].size+=(fa=search(a,b,post[k].right,0,k)); else { fc=search(a,mi,post[k].left,1,k),fb=search(mi+1,b,post[k].right,0,k); post[k].size+=(fa=fc||fb); } return fa; } int main() { int e,n,i,poa[10001],pob[10001]; //FILE *in=fopen("E:\\Rieman's Files\\ACM\\input.txt","r"),*out=fopen("E:\\Rieman's Files\\ACM\\output.txt","w"); scanf("%d",&e); //int t=GetTickCount(); while(e--) { scanf("%d",&n); for(i=n;i>0;i--) scanf("%d%d",poa+i,pob+i); post[1]=null,post[1].a=1,post[1].b=inf; for(p=2,i=1;i<n+1;i++) search(poa[i],pob[i],1,0,0); cout<<post[1].size<<endl; } //printf("%d ms\n",GetTickCount()-t); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator