Pagini recente » Cod sursa (job #2933633) | Cod sursa (job #391755) | Cod sursa (job #26117) | Cod sursa (job #2083604) | Cod sursa (job #2575649)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
const int NMAX = 100005;
int v[NMAX];
vector <int> a;
int poz[NMAX];
vector <int> sol;
int main() {
int n, maxim = 0;
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &n);
for(int i = 1; i <= n; i++) {
scanf("%d", &v[i]);
vector<int>::iterator it;
it = lower_bound(a.begin(), a.end(), v[i]);
if(it == a.end()) {
a.push_back(v[i]);
poz[i] = a.size() - 1;
}
else {
int p = it - a.begin();
a[p] = v[i];
poz[i] = p;
}
maxim = max(maxim, poz[i]);
}
printf("%d\n", maxim + 1);
for(int i = n; i > 0; i--) {
if(poz[i] == maxim) {
maxim--;
sol.push_back(v[i]);
}
}
for(int i = sol.size() - 1; i > -1; i--) {
printf("%d ", sol[i]);
}
printf("\n");
return 0;
}