Pagini recente » Cod sursa (job #1445055) | Cod sursa (job #2515206) | Cod sursa (job #2506991) | Cod sursa (job #1035047) | Cod sursa (job #3166734)
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
ifstream f("scmax.in");
ofstream g("scmax.out");
int n, l;
vector<int> dp, v, prv, idx;
int main()
{
f >> n; dp.pb(0), v.resize(n+3),
prv.resize(n+3); idx.resize(n+3);
for (int i = 1; i <= n; i++){
f >> v[i];
vector<int>::iterator it = lower_bound(dp.begin(), dp.end(),v[i]);
if (it == dp.end()) {
l++, dp.pb(v[i]);
prv[i] = idx[l-1];
idx[l] = i;
}
else {
int k = it - dp.begin();
*it = v[i];
prv[i] = idx[k-1];
idx[k] = i;
}
}
g << l << '\n';
stack<int> stk;
int k = idx[l];
while (k) {stk.push(v[k]); k = prv[k];}
while (!stk.empty()){g << stk.top() << ' '; stk.pop();}
return 0;
}