Pagini recente » Borderou de evaluare (job #3116981) | Monitorul de evaluare | Borderou de evaluare (job #3117038) | Borderou de evaluare (job #1344013) | Cod sursa (job #2134809)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream c("scmax.out");
int n, lmax, a[100005], viz[100005], poz[100005];
void out(int i)
{
if (poz[i]==0) cout<<a[i]<<" ";
else out(poz[i]), cout<<a[i]<<" ";
}
int main()
{
int i, j, st, dr, med;
f>>n;
for (i=1; i<=n; i++) f>>a[i];
viz[1]=1; lmax=1;
for (i=2; i<=n; i++)
{
st=1; dr=lmax;
while (st<=dr)
{
med=(st+dr)/2;
if (a[viz[med]]>=a[i]) dr=med-1;
else st=med+1;
}
if (st==lmax+1) lmax++;
viz[st]=i;
poz[i]=viz[st-1];
}
cout<<lmax<<"\n";
out(viz[lmax]);
return 0;
}