Pagini recente » Cod sursa (job #2047340) | Cod sursa (job #1756834) | Cod sursa (job #1576004) | Cod sursa (job #2713128) | Cod sursa (job #1498358)
#include <iostream>
#include <fstream>
#define nmax 100005
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
long nr,p[nmax],v[nmax],l[nmax],best[nmax];
void afisare(long poz)
{
if(p[poz])
afisare(p[poz]);
fout<<v[poz]<<' ';
}
long cauta(long x)
{ long s=0,d=nr,m;
while(s<=d)
{m=(s+d)/2;
if(v[l[m]]<x && x<=v[l[m+1]])return m;
else if(x>v[l[m+1]])s=m+1;
else d=m-1;
}
return nr;
}
int main()
{long n,i,poz;
nr=1;
fin>>n;
for(i=1;i<=n;i++)fin>>v[i];
best[1]=l[1]=1;
l[0]=0;
for(i=2;i<=n;i++)
{
poz=cauta(v[i]);
p[i]=l[poz];
best[i]=poz+1;
l[poz+1]=i;
if(poz+1>nr)nr=poz+1;
}
long maxim;
maxim=best[1];poz=1;
for(i=2;i<=n;i++)
if(maxim<best[i])
{
maxim=best[i];poz=i;
}
fout<<maxim<<'\n';
afisare(poz);
}