Pagini recente » Cod sursa (job #1333707) | Cod sursa (job #1354445) | Cod sursa (job #835324) | Cod sursa (job #1933742) | Cod sursa (job #2246798)
#include <bits/stdc++.h>
using namespace std;
FILE *fin, *fout;
int v[100001], pred[100001], pozmin[100001];
int cautBin( int nr, int n ) {
int r = 1, pas = 1 << 16;
while ( pas != 0 ) {
if ( r + pas <= n && v[pozmin[r + pas]] < nr ) {
r += pas;
}
pas /= 2;
}
return r;
}
void afisare( int i ) {
if ( pred[i] != 0 )
afisare( pred[i] );
fprintf( fout, "%d ", v[i] );
}
int main() {
int n, i, m, j;
fin = fopen( "scmax.in", "r" );
fout = fopen( "scmax.out", "w" );
fscanf( fin, "%d", &n );
m = 1;
for ( i = 1; i <= n; i++ ) {
fscanf( fin, "%d", &v[i] );
j = cautBin( v[i], m );
pred[i] = pozmin[j];
pozmin[j + 1] = i;
if ( j == m ) {
m++;
}
}
fprintf( fout, "%d\n", m - 1 );
afisare( pozmin[m] );
fclose( fin );
fclose( fout );
return 0;
}