Pagini recente » Cod sursa (job #948020) | Cod sursa (job #1681709) | Cod sursa (job #2356874) | Cod sursa (job #2771196) | Cod sursa (job #1650384)
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int best[1002],m[1002];
int tata[1002];
int indice[1002];
int n,v[1002];
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;
}