Pagini recente » Cod sursa (job #621700) | Cod sursa (job #3185154) | Cod sursa (job #1358424) | Cod sursa (job #2780644) | Cod sursa (job #2689740)
#include <bits/stdc++.h>
using namespace std;
ifstream fin( "scmax.in" );
ofstream fout( "scmax.out" );
const int NMAX = 1e5;
const int INF = 2e9 + 2;
int v[NMAX + 1], dp[NMAX + 1];
int p[NMAX + 1], a[NMAX + 1];
int main() {
int n, i, lung, j;
fin >> n;
for( i = 1; i <= n; ++i )
fin >> v[i];
for( i = 0; i <= NMAX; ++i )
dp[i] = INF;
dp[1] = v[1];
p[1] = 1;
lung = 1;
for( i = 1; i <= n; ++i ){
int st, dr, med;
st = 0; dr = NMAX;
while( dr - st > 1 ){
med = (st + dr) >> 1;
if( dp[med] < v[i] )
st = med;
else
dr = med;
}
if( dp[dr] == INF ){
dp[++lung] = v[i];
p[i] = lung;
}
else{
dp[dr] = v[i];
p[i] = dr;
}
}
fout << lung << "\n";
for ( j = n, i = lung; i >= 1; i--) {
while (p[j] != i) j--;
a[i] = v[j];
}
for ( i = 1; i <= lung; i++)
fout << a[i] << " ";
return 0;
}