Pagini recente » Cod sursa (job #2525897) | Cod sursa (job #2194848) | Cod sursa (job #677095) | Cod sursa (job #1379939) | Cod sursa (job #1650398)
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int best[100002],m[100002];
int tata[100002];
int indice[100002];
int n,v[100002];
int lmax=0,poz;
void citire()
{
fin>>n;
for(int i=1;i<=n;i++)
{
fin>>v[i];
}
}
int cautare_binara(int poz1, int poz2,int valoare)
{
int mi;
while(poz1<=poz2)
{
mi=(poz1+poz2)/2;
if(best[mi]>=valoare)
{
poz2=mi-1;
}
else
poz1=mi+1;
}
return poz1;
}
void reconstituire(int pozitie)
{
if(pozitie!=0)
{
reconstituire(tata[pozitie]);
fout<<v[pozitie]<<' ';
}
}
void rezolvare()
{
int i;
int pozitie;
for(i=1;i<=n;i++)
{
m[i]=cautare_binara(1,lmax,v[i]);
best[m[i]]=v[i];
indice[m[i]]=i;
tata[i]=indice[m[i]-1];
if(m[i]>lmax)
{
lmax=m[i];
poz=i;
}
}
fout<<lmax<<'\n';
reconstituire(poz);
}
int main()
{
citire();
rezolvare();
return 0;
}