Pagini recente » Cod sursa (job #482963) | Cod sursa (job #1663954) | Cod sursa (job #1332932) | Cod sursa (job #320246) | Cod sursa (job #3217854)
#include <bits/stdc++.h>
using namespace std;
int main() {
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
int n, lmax;
cin >> n;
vector<int> dp(n, 0);
vector<int> pred(n, -1);
vector<int> v;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
v.push_back(x);
int left = 0, right = lmax - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (v[dp[mid]] < x)
left = mid + 1;
else
right = mid - 1;
}
dp[left] = i;
pred[i] = dp[left - 1];
lmax = max(lmax, left + 1);
}
cout << lmax << "\n";
int pos = dp[lmax - 1];
vector<int> sol;
while (sol.size() < lmax) {
sol.push_back(v[pos]);
pos = pred[pos];
}
reverse(sol.begin(), sol.end());
for (int i = 0; i < lmax; i++) {
cout << sol[i] << " ";
}
return 0;
}