Pagini recente » Cod sursa (job #1963547) | Istoria paginii descriere/ordonare/de-la-nave | Arhiva de probleme | Clasament baraj_lasm_cl_xi_xii | Cod sursa (job #1292451)
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int a[100004],v[100004],d[100004],i,maxim,n,st,dr,poz,mij;
int dreapta;
void rec(int i, int maxim)
{
if (maxim == 0) return;
while( !(a[i]<dreapta && d[i] == maxim ))
i--;
dreapta = a[i];
rec(i-1,maxim-1);
fout<<a[i]<<" ";
}
int main()
{
fin>>n;
maxim=1;
for(i=1;i<=n;i++)fin>>a[i];
v[1]=a[1];
d[1]=1;
for(i=2;i<=n;i++)
{
st=1;
dr=d[i-1];
while(st<=dr)
{
mij=(st+dr)/2;
if(v[mij]<a[i])
{
poz=mij;
st=mij+1;
}
else dr=mij-1;
}
if(poz)
{
poz++;
d[i]=poz;
v[poz]=a[i];
if(maxim<d[i])maxim=d[i];
poz=0;
}
else
{
d[i]=1;
v[1]=a[i];
}
}
fout<<maxim<<'\n';
dreapta = 2000000001;
rec(n,maxim);
return 0;
}