Pagini recente » Cod sursa (job #2495419) | Cod sursa (job #1712982) | Clasament hjghj | Cod sursa (job #2899618) | Cod sursa (job #363957)
Cod sursa(job #363957)
#include<iostream>
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
vector <int> bin(100001),l(100001),ant(100001),a(100001);
int n,l1,bin1;
int bs(int x)
{
int i,step;
for (step=1;step<=bin1;step<<=1);
for (i=0;step;step>>=1)
if (i+step<=bin1&&a[bin[i+step]]<x)
i+=step;
return ++i;
}
void rec(int p)
{
if(ant[p]>0)
rec(ant[p]);
printf("%d ",a[p]);
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
scanf("%d",&a[1]);
bin[++bin1]=1;
l[1]=1;
for(int i=2;i<=n;i++)
{
scanf("%d",&a[i]);
l1=bin1+1;
if(a[bin[bin1]]<a[i])
bin[++bin1]=i;
else
{
l1=bs(a[i]);
bin[l1]=i;
}
l[i]=l1;
ant[i]=bin[l1-1];
}
printf("%d\n",bin1);
rec(max_element(l.begin()+1,l.begin()+n+1)-l.begin());
return 0;
}