Pagini recente » Cod sursa (job #2866168) | Cod sursa (job #1016314) | Cod sursa (job #505841) | Cod sursa (job #2240564) | Cod sursa (job #1817813)
#include <vector>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxN = 100000;
int N, v[maxN + 1], p[maxN + 1];
vector<int> q, sol;
int main() {
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
int N;
scanf("%d", &N);
for(int i = 1; i <= N; ++ i)
scanf("%d", &v[i]);
p[1] = 1;
q.push_back(v[1]);
for(int i = 1; i <= N; ++ i) {
auto ptr = lower_bound(q.begin(), q.end(), v[i]);
if(ptr == q.end()) {
q.push_back(v[i]);
p[i] = q.size() - 1;
} else
q[p[i] = ptr - q.begin()] = v[i];
}
printf("%d\n", q.size());
int target = q.size() - 1;
for(int i = N; i; -- i) {
if(p[i] == target) {
sol.push_back(v[i]);
-- target;
}
}
for(auto it = sol.rbegin(); it != sol.rend(); ++ it)
printf("%d ", *it);
printf("\n");
return 0;
}