Pagini recente » Cod sursa (job #415753) | Cod sursa (job #2038678) | Cod sursa (job #1361498) | Cod sursa (job #569827) | Cod sursa (job #744588)
Cod sursa(job #744588)
#include <cstdio>
#define INF 2000000001
using namespace std;
int Q[100002], P[100002], A[100002], i, K, L=0, n, Mx;
int cb(int x, int st, int dr){
int m, poz=0;
while (st<=dr && !poz){
m=(st+dr)/2;
if (Q[m]==x) poz=m;
else if (Q[m]>x) dr = m-1;
else st = m+1;
}
if (!poz) poz=st;
if (st>L) L++;
Q[poz]=x;
return poz;
}
void scrie ( int i, int x, int mx){
if(i>0){
if (A[i]<x && P[i]==mx) {
scrie (i-1, A[i], mx-1);
printf("%d ", A[i]);
}
else scrie (i-1, x, mx);
}
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d\n", &n);
for (i=1; i<=n; ++i) scanf("%d", &A[i]);
for (i=1; i<=n; ++i)
{
P[i]=cb(A[i],1,L);
if (P[i]>Mx) {Mx=P[i]; K=i;}
}
printf("%d\n", L);
scrie(K, INF, Mx);
return 0;
}