Pagini recente » Cod sursa (job #200312) | Cod sursa (job #2487639) | Cod sursa (job #2549531) | Cod sursa (job #2854137) | Cod sursa (job #2696089)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
const int POW = 16;
const int MAXN = 100000;
int v[MAXN], p[MAXN], ind[MAXN];
int coutare_binara( int nr, int left, int right ){
int i, step;
i = left - 1;
step = 1 << POW;
while( step != 0 ){
if( i + step <= right && v[ ind[ i + step ] ] < nr )
i = i + step;
step = step >> 1;
}
return i;
}
void afisare( int pozitie ){
if( pozitie != -1 ){
afisare( p[pozitie] );
//cout<<p[pozitie]<<'\n';
out<<v[pozitie]<<" ";
}
}
int main()
{
int n, i, lung, max_lung;
in>>n;
for( i = 0; i < n; i++ )
in>>v[i];
max_lung = 0;
for( i = 0; i < n; i++ ){
lung = coutare_binara( v[i], 0, max_lung - 1 ) + 1;
ind[lung] = i;
if( lung > 0 )
p[i] = ind[ lung - 1 ];
else
p[i] = -1;
max_lung = max( lung + 1, max_lung );
}
out<<max_lung<<'\n';
afisare( ind[ max_lung - 1 ] );
return 0;
}