Pagini recente » Diferente pentru info-oltenia-2018/individual intre reviziile 3 si 2 | Atasamentele paginii Clasament tema_lee | Atasamentele paginii Clasament rep | Cod sursa (job #1906543) | Cod sursa (job #1550131)
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,i,v[100010],s[100010],p[100010],ls,nr;
int caut_bin(int x)
{
int st,i;
for(st=1;st<=ls;st<<=1);
for(i=0;st;st>>=1)
if(i+st<=ls && s[st+i]<x)
i+=st;
return i+1;
}
void afisare(int nr, int i)
{
if(i>0)
{
if(p[i]==nr)
{
afisare(nr-1,i-1);
fout<<v[i]<<" ";
}
else
afisare(nr,i-1);
}
}
int main()
{
fin>>n;
ls=0;
for(i=1;i<=n;i++)
{
fin>>v[i];
if(ls==0)
{
s[1]=v[i];
ls++;
p[i]=1;
}
else
{
ls=caut_bin(v[i]);
s[ls]=v[i];
p[i]=ls;
}
nr=max(nr,p[i]);
}
fout<<nr<<'\n';
afisare(nr,n);
fin.close();
fout.close();
return 0;
}