Pagini recente » Cod sursa (job #307515) | Clasament locu_1_numai_1 | Cod sursa (job #165953) | Cod sursa (job #1782871) | Cod sursa (job #1292991)
#include <fstream>
using namespace std;
ifstream in ("scmax.in");
ofstream out ("scmax.out");
int const N=100001;
int v[N],vmin[N],pred[N],nr;
int caut(int x)
{
int i,pas=1<<16;
for(i=0;pas!=0;pas/=2)
{
if(i+pas<=nr && v[vmin[i+pas]]<x)
i+=pas;
}
return i;
}
int afisare(int i)
{
if(pred[i]>0) afisare(pred[i]);
out<<v[i]<<" ";
}
int main()
{
int i,j,n,p;
in>>n;
for(i=1;i<=n;i++)
in>>v[i];
vmin[1]=1;
nr=1;
for(i=2;i<=n;i++)
{
j=caut(v[i]);
pred[i]=vmin[j];
vmin[j+1]=i;
if(j==nr)
nr++;
}
out<<nr<<"\n";
afisare(vmin[nr]);
return 0;
}