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 |
请大佬帮我看一下,在自己电脑上和HDU上都跑得很快,在这里就超时,是有什么情况没考虑到吗?#include<cstdio> #include<algorithm> using namespace std; int n,a,b,ans[150012],number; struct node{ int v,r,num,tot; node* ch[2]; int cmp(int x) const{ if (x==v) return -1; return x<v? 0:1; } void maintain(){ num=tot; if (ch[0]!=NULL) num+=ch[0]->num; if (ch[1]!=NULL) num+=ch[1]->num; } }* root; void rotate(node* &o,int d){ node* k=o->ch[d^1]; o->ch[d^1]=k->ch[d]; k->ch[d]=o; o->maintain(); k->maintain(); o=k; } void insert(node* &o,int x){ if (o==NULL) { o=new node(); o->v=x,o->r=number,o->num=1,o->tot=1; o->ch[0]=NULL,o->ch[1]=NULL; return ; } int d=o->cmp(x); insert(o->ch[d],x); if (o->ch[d]->r > o->r) rotate(o,d^1); } void insertfind(node* &o,int x){ int d=o->cmp(x); if (d==-1) { o->tot++; o->r=number; return ; } insertfind(o->ch[d],x); if (o->ch[d]->r > o->r) rotate(o,d^1); } int find(node* o,int x){ while (o!=NULL) { int d=o->cmp(x); if (d==-1) return 1; o=o->ch[d]; } return 0; } long long read(){ long long x=0,f=1; char ch=getchar(); while (ch>'9'||ch<'0') { if (ch=='-') f=-1; ch=getchar(); } while (ch>='0'&&ch<='9') { x=(x<<1)+(x<<3)+(ch^'0'); ch=getchar(); } return x*f; } int main(){ while (scanf("%d",&n)==1) { a=read(),b=read(); root=NULL; for (int i=0;i<=n;i++) ans[i]=0; root=new node(); root->v=a,root->r=1; root->num=1,root->tot=1; root->ch[0]=NULL,root->ch[1]=NULL; ans[0]++; for (register int i=2;i<=n;++i) { number=i; a=read(),b=read(); if (find(root,a)) insertfind(root,a); else insert(root,a); root->maintain(); if (root->ch[1]==NULL) ans[root->num-1]++; else ans[root->num - root->ch[1]->num-1]++; } for (register int i=0;i<=n-1;++i) printf("%d\n",ans[i]); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator