Pagini recente » Cod sursa (job #1657754) | Cod sursa (job #1607331) | Cod sursa (job #1845883) | Monitorul de evaluare | Cod sursa (job #1299528)
#include<stdio.h>
#define NMAX 100001
using namespace std;
int v[NMAX],L[NMAX],sol[NMAX],sir[NMAX];
int bin(int x,int p,int q){
if(q<p) return 0;
int mij=(p+q)/2;
if(x==sol[mij]) return mij;
if(x<sol[mij]) return bin(x,p,mij);
return bin(x,mij+1,q);
}
int main(){
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int n,k=0,index=0;
scanf("%d",&n);
for(int i=1;i<=n;++i)
scanf("%d",&v[i]);
for(int i=1;i<=n;++i){
if(sol[1]>=v[i]){
L[i]=1;
sol[1]=v[i];
}
else
if(!bin(v[i],1,k) && v[i]>=sol[k]){
sol[++k]=v[i];
L[i]=k;
}
else
L[i]=bin(v[i],1,k);
}
printf("%d\n",k);
for(int i=n;i>=1;--i)
if(L[i]==k){
sir[++index]=v[i];
--k;
}
for(int i=index;i>=1;--i)
printf("%d ",sir[i]);
return 0;
}