Pagini recente » Cod sursa (job #1242552) | Cod sursa (job #2228482) | Cod sursa (job #2062828) | Cod sursa (job #339580) | Cod sursa (job #744752)
Cod sursa(job #744752)
#include<cstdio>
#define inf 2000000001
using namespace std;
int L,a[100010],q[100010],p[100010],i,n,Max,k;
int bin(int x,int st,int dr){
int m,poz;
poz=0;
while (st<=dr && poz==0){
m=(st+dr)/2;
if (q[m]==x) poz=m;
else if (q[m]>x) dr = m-1;
else st = m+1;
}
if (poz==0) poz=st;
if (st>L) L++;
q[poz]=x;
return poz;
}
void scrie ( int i, int x, int Max){
if(i>0){
if (a[i]<x && p[i]==Max) {
scrie (i-1, a[i], Max-1);
printf("%d ", a[i]);
}
else scrie (i-1, x, Max);
}
}
int main(){
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%d",&a[i]);
for(i=1;i<=n;i++){
p[i]=bin(a[i],1,L);
if(p[i]>Max){
Max=p[i];
k=i;}}
printf("%d\n",L);
scrie(k,inf,Max);
return 0;
}