Pagini recente » Cod sursa (job #1974922) | Cod sursa (job #3311957) | Borderou de evaluare (job #1134374) | Cod sursa (job #3324374) | Cod sursa (job #2376936)
#include <iostream>
#include <stdio.h>
using namespace std;
int lmax,mmax,v[100005],i,a[100005],n;
int ind=1;
int caut (int x){
int mij,p,u;
p=1;
u=n;
while(p<=u){
mij=(p+u)/2;
if(x>a[mij]) p=mij+1;
else u=mij-1;
}
return u;
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++) {scanf("%d",&v[i]);mmax=max(mmax,v[i]);}
for(i=1;i<=n;i++) a[i]=mmax+1;
for(i=1;i<=n;i++){
int p=caut(v[i]);
if(v[i]<a[p+1]) a[p+1]=v[i];
if(p+1>=lmax){lmax=p+1;ind=i;}
}
printf("%d\n",lmax);
//for(i=ind;i>ind-lmax;i++) printf("%d ",v[i]);
// i=n;
// printf("%d ",a[i]);
/* i--;int lmax2=lmax;
int ssol[100005];
int k=0;
ssol[++k]=a[n];
lmax--;
while(i&&lmax)
{
if(a[i]!=a[i+1]) {ssol[++k]=a[i];lmax--;}
i--;
}
for(i=lmax2;i>=1;i--) printf("%d ",ssol[i]);*/
for(i=1;i<=lmax;i++) printf("%d ",a[i]);
return 0;
}