Pagini recente » Cod sursa (job #1030617) | Cod sursa (job #2022092) | Profil pufy | Monitorul de evaluare | Cod sursa (job #3302040)
#include <fstream>
#include <vector>
using namespace std;
int dp[100005], v[100005], t[100005];
vector <int> r;
int main(){
int n, i, j, poz, ras;
ifstream fin( "scmax.in" );
ofstream fout( "scmax.out" );
fin >> n;
for( i = 1; i <= n; i++ ){
fin >> v[i];
}
v[0] = -INT32_MAX;
v[n + 1] = INT32_MAX;
dp[0] = 0;
for( i = 1; i <= n; i++ ){
dp[i] = n + 1;
}
ras = 0;
for( i = 1; i <= n; i++ ){
poz = 0;
for( j = 20; j >= 0; j-- ){
if( poz + ( 1 << j ) <= n && v[dp[poz + ( 1 << j )]] < v[i] ){
poz += ( 1 << j );
}
}
poz++;
dp[poz] = i;
t[i] = dp[poz - 1];
ras = max( poz, ras );
}
fout << ras << '\n';
j = dp[ras];
for( i = 0; i < ras; i++ ){
r.push_back( v[j] );
j = t[j];
}
for( i = ras - 1; i >= 0; i-- ){
fout << r[i] << ' ';
}
return 0;
}