Pagini recente » Cod sursa (job #2138836) | Cod sursa (job #604291) | Cod sursa (job #2363478) | Cod sursa (job #1523646) | Cod sursa (job #2072286)
#include <cstdio>
#include <vector>
using namespace std;
const int NMAX = 100005;
int v[NMAX];
int poz[NMAX];
int sol[NMAX];
vector <int> vec;
int main() {
int n;
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &n);
for(int i = 1; i <= n; ++i) {
scanf("%d", &v[i]);
}
vec.push_back(v[1]);
for(int i = 2; i <= n; ++i) {
auto it = lower_bound(vec.begin(), vec.end(), v[i]);
if(it == vec.end()) {
vec.push_back(v[i]);
poz[i] = vec.size() - 1;
}
else {
poz[i] = it - vec.begin();
vec[poz[i]] = v[i];
}
for(int j = 0; j < vec.size(); ++j) {
printf("%d ", vec[j]);
}
printf("\n");
}
int nr = vec.size() - 1;
for(int i = n; i; --i) {
if(nr == poz[i]) {
sol[++sol[0]] = v[i];
--nr;
}
}
printf("%d\n", sol[0]);
while(sol[0]) {
printf("%d ", sol[sol[0]--]);
}
printf("\n");
return 0;
}