Pagini recente » Profil StarGold2 | Cod sursa (job #2035246) | Cod sursa (job #3285783) | Cod sursa (job #3211532) | Cod sursa (job #1037876)
#include<iostream>
#include<fstream>
#include<cstdio>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,a[100005],poz[100005],v[100005],poz1,vb;
inline void Citire()
{
fin>>n;
for (int i=1;i<=n;i++)
fin>>a[i];
}
inline void Formeaza()
{
int i,maxim,st,dr,nr,mij;
maxim=-1;
v[1]=a[1];vb=1;poz[1]=1;
for (i=2;i<=n;i++)
{
st=1;dr=vb;
while (st<=dr)
{
mij=(st+dr)/2;
if (v[mij]>=a[i] && v[mij-1]<a[i])
st=dr+1;
else if (v[mij]>=a[i]) dr=mij-1;
else {st=mij+1;mij=st;}
}
if (v[mij]==0)
vb++;
v[mij]=a[i];
poz[i]=mij;
}
for (i=1;i<=n;i++)
if (poz[i]>maxim)
{
maxim=poz[i];
poz1=i;
}
nr=poz[poz1];
v[0]=nr;
fout<<nr<<"\n";
for (i=poz1;i>=1 && nr>=1;i--)
if (poz[i]==nr)
{v[nr]=a[i];
nr--;}
for (i=1;i<=v[0];i++)
fout<<v[i]<<" ";
fout<<"\n";
}
int main()
{
Citire();
Formeaza();
return 0;
}