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 |
那位大侠帮查下错#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int N=300005; int a[N],b[N],c[N];//b[N],c[N]分别为lis,lds int n; int main() { int li,ld,i;//li,ld为lis,lds长度 int n; cin>>n; li=ld=1; for(i=0;i<n;i++) scanf("%d",&a[i]); b[1]=c[1]=a[0]; for(i=1;i<n;i++) { int x1,x2,x,mid; x1=1; x2=li; x=a[i]; while(x1<=x2) { mid=(x1+x2)/2; if(b[mid]<x&&b[mid+1]>x) break; if(b[mid]>x) x2=mid-1; else if(b[mid]<=x) x1=mid+1; } if(b[li]<=x) { li++; b[li]=x; } else if(x1<=x2) b[mid+1]=x; else if(b[x1]>x) b[x1]=x; } for(i=1;i<n;i++) { int x1,x2,x,mid; x1=1; x2=ld; x=a[i]; while(x1<=x2) { mid=(x1+x2)/2; if(c[mid]>x&&c[mid+1]<x) break; if(c[mid]<=x) x2=mid-1; else x1=mid+1; } if(c[ld]>=x) { ld++; c[ld]=x; } else if(x1<=x2) c[mid+1]=x; else if(c[x1]<x) c[x1]=x; } if(li>ld) ld=li; cout<<n-ld<<endl; return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator