Pagini recente » Cod sursa (job #330313) | Cod sursa (job #1635319) | Cod sursa (job #166269) | Cod sursa (job #551181) | Cod sursa (job #865363)
Cod sursa(job #865363)
#include<cstdio>
using namespace std;
#define MAX 100001
int X[MAX],P[MAX],M[MAX],best[MAX];
int L,n;
void scrie(int poz){
if(P[poz])
scrie(P[poz]);
printf("%d ",X[poz]);
}
int bin(int x){
int p=0,u=L,m;
m=(p+u)/2;
while(p<=u){
if(X[M[m]]<x && x<=X[M[m+1]])return m;
else if(x>X[M[m+1]]){p=m+1;m=(p+u)/2;}
else {u=m-1;m=(p+u)/2;}
}
return L;
}
int main(){
int i,j,poz,mx=0;
freopen("scmax.in","r",stdin);
scanf("%d",&n);
for(i=1;i<=n;++i)
scanf("%d",&X[i]);
fclose(stdin);
L=1;M[0]=0;M[1]=1;
for(i=2;i<=n;++i){
poz=bin(X[i]);
P[i]=M[poz];
best[i]=poz+1;
M[poz+1]=i;
if(poz+1 > L)
L=poz+1;
}
for(i=1;i<=n;++i)
if(best[i]>mx)
mx=best[i],poz=i;
freopen("scmax.out","w",stdout);
printf("%d\n",mx);
scrie(poz);
fclose(stdout);
return 0;
}