Pagini recente » Cod sursa (job #2663481) | Cod sursa (job #505487) | Cod sursa (job #1960293) | Cod sursa (job #297309) | Cod sursa (job #2306808)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#define FILE_NAME "scmax"
#define N_MAX 100005
using namespace std;
ifstream in ( FILE_NAME".in" );
ofstream out ( FILE_NAME".out" );
int N;
int a[N_MAX], t[N_MAX];
vector<int> dp;
void print(int c) {
if (c) {
print(t[c]);
out << a[c] << ' ';
}
}
int main() {
in >> N;
for (int i = 1; i <= N; ++i)
in >> a[i];
dp.push_back(1);
for (int i = 2; i <= N; ++i) {
int poz = int(upper_bound(dp.begin(), dp.end(), i, [](int j, int k) {
return a[j] <= a[k];
}) - dp.begin());
if (poz == int(dp.size()))
dp.push_back(i);
else
dp[poz] = i;
t[i] = dp[poz - 1];
}
out << dp.size() << '\n';
print(dp[dp.size() - 1]);
}