Pagini recente » Cod sursa (job #264038) | Cod sursa (job #2261457) | Cod sursa (job #1212883) | Cod sursa (job #1498991) | Cod sursa (job #2222799)
#include <bits/stdc++.h>
using namespace std;
int N;
vector<int> V;
vector<int> ST;
vector<int> pre;
vector<int> pos;
vector<int> answer;
int main()
{
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
fin.sync_with_stdio(false);
fin.tie(0);
int N;
fin >> N;
V.resize(N + 1);
pre.resize(N + 1);
pos.resize(N + 1);
for (int i = 1; i <= N; ++i)
fin >> V[i];
for (int i = 1; i <= N; ++i)
{
int pz = lower_bound(ST.begin(), ST.end(), V[i]) - ST.begin();
if(pz == ST.size())
ST.emplace_back(V[i]);
else
ST[pz] = V[i];
if (pz - 1 >= 0) pre[i] = pos[pz - 1];
else pre[i] = 0;
pos[pz] = i;
}
fout << ST.size() << "\n";
int steps = ST.size();
int k = pos[ST.size() - 1];
while (steps--) {
answer.emplace_back(V[k]);
k = pre[k];
}
reverse(answer.begin(), answer.end());
for (auto it : answer)
fout << it << " ";
return 0;
}