记录编号 |
447172 |
评测结果 |
AAAAAAATTT |
题目名称 |
[NOIP 2013]花匠 |
最终得分 |
70 |
用户昵称 |
+1s |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
3.023 s |
提交时间 |
2017-09-09 15:41:40 |
内存使用 |
70.68 MiB |
显示代码纯文本
- #include<cstdio>
- #include<algorithm>
- #include<cmath>
- using namespace std;
- int n,a[100010],ar[100010],tp[100010],k,re[100010][5];
- struct tre{int l,r,ma;}stree[5000500],stree2[5000500];
- int mxx(int a,int b){return a>b?a:b;}
- void bui(int l,int r,int idx,struct tre *t)
- {
- (t+idx)->l=l;
- (t+idx)->r=r;
- (t+idx)->ma=0;
- if(l==r)return;
- int m=(l+r)/2;
- bui(l,m,idx*2,t);
- bui(m+1,r,idx*2+1,t);
- }
- int qry(int l,int r,int idx,struct tre t[])
- {
- if(l>r)return 0;
- if(t[idx].l==0&&t[idx].r==0)return 0;
- if(t[idx].l==l&&t[idx].r==r)return t[idx].ma;
- if(r<=t[idx*2].r)return qry(l,r,idx*2,t);
- else if(l>=t[idx*2+1].l)return qry(l,r,idx*2+1,t);
- else return mxx(qry(l,t[idx*2].r,idx*2,t),qry(t[idx*2+1].l,r,idx*2+1,t));
- }
- void upda(int nu,int val,int idx,struct tre *tr)
- {
- if((tr+idx)->l==0&&(tr+idx)->r==0)return;
- if((tr+idx)->l<=nu&&nu<=(tr+idx)->r)(tr+idx)->ma=mxx((tr+idx)->ma,val);
- upda(nu,val,idx*2,tr);
- upda(nu,val,idx*2+1,tr);
- }
- int bs(int nu)
- {
- int lo=1,hi=k;
- while(lo<hi)
- {
- int md=(lo+hi)>>1;
- if(tp[md]>=nu)hi=md;
- else lo=md+1;
- }
- return hi;
- }
- int ma()
- {
- freopen("FlowerNOIP2013.in","r",stdin);
- freopen("FlowerNOIP2013.out","w",stdout);
- scanf("%d",&n);
- for(int i=1;i<=n;i++)
- {
- scanf("%d",&a[i]);
- a[i]++;
- ar[i]=a[i];
- }
- sort(a+1,a+1+n);
- for(int i=1;i<=n;i++)if(a[i]!=a[i-1])tp[++k]=a[i];
- for(int i=1;i<=n;i++)ar[i]=bs(ar[i]);
- bui(1,n,1,stree);
- bui(1,n,1,stree2);
- re[1][0]=re[1][1]=1;
- upda(ar[1],1,1,stree);
- upda(ar[1],1,1,stree2);
- for(int i=2;i<=n;i++)
- {
- int m1=0,m2=0;
- m1=qry(ar[i]+1,n,1,stree2),m2=qry(1,ar[i]-1,1,stree);
- re[i][0]=m1+1;
- re[i][1]=m2+1;
- upda(ar[i],m1+1,1,stree);
- upda(ar[i],m2+1,1,stree2);
- }
- int mx=0;
- for(int i=1;i<=n;i++)mx=mxx(mx,max(re[i][0],re[i][1]));
- printf("%d",mx);
- return 0;
- }
- int faq=ma();
- int main()
- {
- return 0;
- }