Pagini recente » Cod sursa (job #2841269) | Cod sursa (job #2648005) | Cod sursa (job #1058437) | Cod sursa (job #762443) | Cod sursa (job #2756738)
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
int N;
vector<int> v, DP, daddy, pos, answer;
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
int N;
scanf("%d", &N);
v.resize(N);
daddy.resize(N);
for (int i = 0; i < N; ++i) {
scanf("%d", &v[i]);
int pz = lower_bound(DP.begin(), DP.end(), v[i]) - DP.begin();
if (pz == DP.size()) {
pos.emplace_back(i);
DP.emplace_back(v[i]);
}
else {
pos[pz] = i;
DP[pz] = v[i];
}
if (pz > 0)
daddy[i] = pos[pz-1];
else
daddy[i] = -1;
}
int pz = pos.back();
while (pz != -1) {
answer.emplace_back(v[pz]);
pz = daddy[pz];
}
reverse(answer.begin(), answer.end());
printf("%d\n", (int)answer.size());
for (auto it: answer)
printf("%d ", it);
return 0;
}