Pagini recente » Cod sursa (job #288788) | Cod sursa (job #1785025) | Cod sursa (job #869516) | Cod sursa (job #1558028) | Cod sursa (job #2892802)
#include <iostream>
#include <fstream>
#define Nmax 100000
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
int n,i,nr,secvmx,st,dr,mij;
int l[Nmax+1],v[Nmax+1],pred[Nmax+1];
bool ok;
void sol(int i)
{
if (i==0)
return;
sol(pred[i]);
fout<<v[i]<<' ';
}
int main()
{
fin>>n;
for (i=1;i<=n;i++)
{
fin>>v[i];
if (v[l[secvmx]]<v[i])
{
pred[i]=l[secvmx];
l[++secvmx]=i;
}
else
{
///cautare binara
st=1;
dr=secvmx;
ok=1;
while(st<=dr && ok)
{
mij=(st+dr)/2;
if (v[l[mij]]<=v[i])
{
st=mij+1;
}
else
{
if (v[l[mij-1]]>=v[i])
{
dr=mij-1;
}
else
{
l[mij]=i;
pred[i]=l[mij-1];
ok=0;
}
}
}
}
}
fout<<secvmx<<'\n';
sol(l[secvmx]);
fin.close();
fout.close();
return 0;
}