Pagini recente » Cod sursa (job #40833) | Cod sursa (job #3227914) | Cod sursa (job #1444791) | Cod sursa (job #77060) | Cod sursa (job #2720495)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int NMAX = 100000;
int nr, v[NMAX + 1], L[NMAX + 1], best[NMAX + 1], pred[NMAX + 1];
int bs( int x ) {
int r = 0;
int pas = 1<<20;
while( pas ) {
pas /= 2;
if( r + pas <= nr && v[L[pas]] < x )
r += pas;
}
return r;
}
void rec( int i ) {
if( i == 0 )
return ;
rec(pred[i]);
fout<<v[i]<<" ";
}
int main() {
int n;
fin>>n;
for( int i = 1; i <= n; i ++ )
fin>>v[i];
int start, maxim = 0;
for( int i = 1; i <= n; i ++ ) {
int p = bs(v[i]);
L[p + 1] = i;
best[i] = best[L[p]] + 1;
pred[i] = L[p];
if( nr < p + 1 )
nr = p + 1;
if( best[i] > maxim ) {
maxim = best[i];
start = i;
}
}
fout<<maxim<<"\n";
rec(start);
return 0;
}