Cod sursa(job #2575649)

Utilizator stefan_creastaStefan Creasta stefan_creasta Data 6 martie 2020 14:52:29
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#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;
}