Pagini recente » Cod sursa (job #957325) | Cod sursa (job #2272213) | Cod sursa (job #1162052) | Cod sursa (job #1014613) | Cod sursa (job #2131363)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
const int N = 100000;
int val[N], v[N];
int lung[N], m, pred[N], poz[N];
ifstream fin ("scmax.in" );
ofstream fout ("scmax.out");
int cautbin ( double x )
{
int pas = 1 << 30, r = 0;
while ( pas != 0 )
{
if ( r + pas <= m && val[r + pas] < x)
r += pas;
pas = pas >> 1;
}
return r;
}
void subsir ( int p )
{
if( pred[p] != 0 )
{
subsir ( pred[p] );
}
fout << v[p] <<" ";
}
int main()
{
int n, s = 0, lmax = 0;
fin >> n;
for ( int i = 0 ; i < n ; i ++ )
fin >> v[i];
int j;
val[0] = v[0];
for ( int i = 0 ; i < n ; i ++ )
{
j = cautbin ( v[i]);
if ( j == m )
{
m ++;
}
val[j+1] = v[i];
poz[j+1] = i;
pred[i] = poz[j];
lung[i] = j + 1;
}
fout << m << "\n";
subsir ( poz[m] );
return 0;
}