Pagini recente » Cod sursa (job #606645) | Cod sursa (job #1762828) | Cod sursa (job #2736743) | Cod sursa (job #2734645) | Cod sursa (job #505533)
Cod sursa(job #505533)
#include <iostream>
using namespace std;
#include <fstream>
long n;
long valori[100003],cresc[100003];
long nr;
void citire()
{
fstream f("scmax.in",ios::in);
f>>n;
for (int i = 0 ; 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 ( cresc[middle] < x && x <= cresc[middle+1] )
{
return middle ;
}
else
if (cresc[middle] < x)
first = middle + 1 ;
else
last = middle - 1 ;
middle = (first + last)/2;
}
return nr;
}
void subsir()
{
long loc ;
cresc[1]=valori[0];
for (int i = 1 ; i < n ; i ++ )
{
loc = cauta_loc(valori[i]);
cresc[loc+1] = valori[i];
if (nr < loc + 1) nr = loc + 1;
}
fstream g("scmax.out",ios::out);
g<<nr<<endl;
for (int i = 1 ; i <= nr ; i++)
g<<cresc[i]<<" ";
g.close();
}
int main()
{
citire();
subsir();
return 0;
}