Pagini recente » Cod sursa (job #2949316) | Cod sursa (job #2343537) | Cod sursa (job #1433639) | Cod sursa (job #2713180) | Cod sursa (job #3237530)
#include <bits/stdc++.h>
using namespace std;
ifstream fin( "scmax.in" );
ofstream fout( "scmax.out" );
const int DIM = 1e5 + 1;
const int INF = 1e9;
int v[DIM];
int val[DIM], idx[DIM];
int prv[DIM];
void print_sol( int i ) {
if ( prv[i] ) print_sol(prv[i]);
fout << v[i] << " ";
}
int main() {
ios_base::sync_with_stdio(0);
fin.tie(0);
int n;
fin >> n;
val[0] = -INF;
for ( int i = 1; i <= n; ++i ) {
fin >> v[i];
val[i] = INF;
}
for ( int i = 1; i <= n; ++i ) {
int pos = upper_bound(val + 1, val + n + 1, v[i]) - val;
if ( val[pos - 1] < v[i] && val[pos] > v[i] ) {
val[pos] = v[i];
idx[pos] = i;
prv[i] = idx[pos - 1];
}
}
int res = 0;
for ( int i = 1; i <= n; ++i ) {
if ( val[i] != INF ) res = i;
}
fout << res << "\n";
print_sol(idx[res]);
fin.close();
fout.close();
return 0;
}