Pagini recente » Cod sursa (job #893951) | Cod sursa (job #3277160) | Cod sursa (job #2166356) | Cod sursa (job #2314421) | Cod sursa (job #2323887)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <ctime>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int v[100001];
int aux[100001];
int poz[100001];
int solutie[100001];
int main()
{
int n, i, k, st, dr, mij;
f>>n;
k=0;
for(i=1; i<=n; i++)
{
f>>v[i];
st=0;
dr=k;
while(st<dr)
{
mij=(st+dr)/2;
if(aux[mij]==v[i])
st=dr=mij;
else if(aux[mij]<v[i])
st=mij+1;
else
dr=mij;
}
mij=(st+dr)/2;
if(st==k && v[i]>=aux[k])
k++;
aux[mij]=v[i];
poz[i]=mij;
}
cout<<k<<endl;
dr=k-1;
for(i=n; i>0; i--)
{
if(poz[i]==dr)
{
solutie[dr]=i;
dr--;
}
}
for(i=0; i<k; i++)
cout<<v[solutie[i]]<<" ";
return 0;
}