Pagini recente » Cod sursa (job #1408451) | Cod sursa (job #2757649) | Cod sursa (job #1062951) | Cod sursa (job #263290) | Cod sursa (job #2442390)
#include <bits/stdc++.h>
#define NMAX 100000
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int v[NMAX + 1], best[NMAX + 1], L[NMAX + 1], pred[NMAX + 1], nr;
int cb( int x) {
int st = 0;
int dr = nr;
while( st <= dr ) {
int mid = (st + dr) / 2;
if( v[L[mid]] <= x && x < v[L[mid + 1]] )
return mid;
else if( v[L[mid]] < x )
st = mid + 1;
else
dr = mid - 1;
}
return nr;
}
void solve( int i ) {
if( pred[i] == 0 ) {
fout<<v[i]<<" ";
return ;
}
solve(pred[i]);
fout<<v[i]<<" ";
}
int main() {
int n, i;
fin>>n;
for( i = 1; i <= n; i ++ )
fin>>v[i];
best[1] = L[1] = 1;
L[0] = 0;
nr = 1;
int maxim = 0, poz;
for( i = 2; i <= n; i ++ ) {
int p = cb(v[i]);
best[i] = p + 1;
L[p + 1] = i;
pred[i] = L[p];
if( p + 1 > nr )
nr = p + 1;
if( maxim < best[i] )
maxim = best[i], poz = i;
}
fout<<maxim<<"\n";
solve(poz);
return 0;
}