Pagini recente » Cod sursa (job #1130879) | Cod sursa (job #1003963) | Statistici Amalia Babet (babet_amy) | Cod sursa (job #1547366) | Cod sursa (job #1293643)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
#include <vector>
#include <stack>
#include <iostream>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <sstream>
#include <algorithm>
#include <exception>
using namespace std;
int n;
class Solution {
public:
void scmax(vector<int> &a) {
vector<int> b, c;
for (int i = 0; i < a.size(); i++) {
vector<int>::iterator it = lower_bound(c.begin(), c.end(), a[i]);
b.push_back(distance(c.begin(), it));
if (it == c.end()) {
c.push_back(a[i]);
} else {
*it = a[i];
}
}
vector<int> sol;
int k = c.size() - 1;
for (int i = b.size() - 1; i >= 0; i--) {
if (b[i] == k) {
sol.push_back(a[i]);
--k;
}
}
reverse(sol.begin(), sol.end());
printf("%d\n", c.size());
for (int i = 0; i < sol.size(); i++) {
printf("%d ", sol[i]);
}
}
};
int main() {
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
vector<int> a;
scanf("%d", &n);
a.resize(n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
Solution s;
s.scmax(a);
return 0;
}