Pagini recente » Cod sursa (job #2393944) | Cod sursa (job #870112) | Cod sursa (job #1035595) | Cod sursa (job #3198232) | Cod sursa (job #505546)
Cod sursa(job #505546)
#include <iostream>
using namespace std;
#include <fstream>
long n;
long valori[100003],cresc[100003],pred[100003];
long nr;
void citire()
{
fstream f("scmax.in",ios::in);
f>>n;
for (long i = 1 ; i <= n ; i ++ )
{
f>>valori[i];
}
f.close();
}
long cauta_loc(long x)
{
long first = 0 ;
long last = nr ;
long middle = (first+last)/2;
while (first <= last )
{
if ( valori[cresc[middle]] < x && x <= valori[cresc[middle+1]] )
{
return middle ;
}
else
if (valori[cresc[middle+1]] < x)
first = middle + 1 ;
else
last = middle - 1 ;
middle = (first + last)/2;
}
return nr;
}
void subsir()
{
long loc ;
cresc[1]=1;
nr = 1;
for (long i = 2 ; i <= n ; i ++ )
{
loc = cauta_loc(valori[i]);
cresc[loc+1] = i;
pred[i]=cresc[loc];
if (nr < loc + 1) nr = loc + 1;
}
fstream g("scmax.out",ios::out);
g<<nr<<endl;
nr = cresc[nr] ;
long afis[100003];
long cate = 0 ;
while (nr > 0)
{
afis[cate]=valori[nr];
cate++;
nr = pred[nr];
}
//g<<valori[nr];
for (long i = cate-1 ; i>= 0 ; i--)
g<<afis[i]<<" ";
g.close();
}
int main()
{
citire();
subsir();
return 0;
}