Pagini recente » Cod sursa (job #1246061) | Cod sursa (job #2799736) | Cod sursa (job #2729485) | Cod sursa (job #1811653) | Cod sursa (job #1292454)
#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=maxim;
while(st<=dr)
{
mij=(st+dr)/2;
if(v[mij]<a[i])
{
poz=mij;
st=mij+1;
}
else dr=mij-1;
}
poz++;
d[i]=poz;
v[poz]=a[i];
if(maxim<d[i])maxim=d[i];
poz=0;
}
fout<<maxim<<'\n';
dreapta = 2000000001;
rec(n,maxim);
return 0;
}