Pagini recente » Cod sursa (job #386339) | Cod sursa (job #411157) | Cod sursa (job #2476251) | Cod sursa (job #684376) | Cod sursa (job #743434)
Cod sursa(job #743434)
#include <cstdio>
#define INF 2000000001
using namespace std;
int V[100002], P[100002], a[100002], i, K, L, n, Mx;
int cb(int x, int st, int dr){
int m, poz=0;
while (st<=dr && !poz){
m=(st+dr)/2;
if (V[m]==x) poz=m;
else if (V[m]>x) dr = m-1;
else st = m+1;
}
if (!poz){
if (st>L) L++;
poz=st;
}
V[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]);
L=0; //V[1]=INF;
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;
}