Pagini recente » Cod sursa (job #2315563) | Cod sursa (job #2093361) | Cod sursa (job #2937834) | Cod sursa (job #500477) | Cod sursa (job #2322008)
#include <bits/stdc++.h>
using namespace std;
int v[100001];
int aux[100001];
int poz[100001];
int sol[100001];
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
int n, i, k, st, dr, med;
scanf("%d",&n);
k=0;
for(i=1; i<=n; i++)
{
scanf("%d",&v[i]);
st=0;
dr=k;
while(st<dr)
{
med=(st+dr)/2;
if(aux[med]==v[i])
st=dr=med;
else if(aux[med]<v[i])
st=med+1;
else
dr=med;
}
med=(st+dr)/2;
if(st==k && v[i]>=aux[k])
k++;
aux[med]=v[i];
poz[i]=med;
}
printf("%d\n",k);
dr=k-1;
for(i=n; i>0; i--)
{
if(poz[i]==dr)
{
sol[dr]=i;
dr--;
}
}
for(i=0; i<k; i++)
{
printf("%d ",v[sol[i]]);
}
return 0;
}