Cod sursa(job #2596039)

Utilizator blackmanta45Andrei blackmanta45 Data 9 aprilie 2020 06:22:16
Problema Subsir crescator maximal Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int i, n, j,x,p[1000010],ante[1000010],poz,a[1000010];
const int INF = 1e9;

void afisare(int poz, int ante[]) {
    if (poz != 0) {
        afisare(ante[poz], ante);
        fout << a[poz] << " ";
    }
}

void lis(int a[]) {
    int maxim;
    vector<int> d(n + 1, INF);
    maxim = d[0] = -INF;

    for (int i = 1; i <= n; i++) {
        int j = upper_bound(d.begin(), d.end(), a[i]) - d.begin();
        if (a[i] != d[j - 1]) { 
            d[j] = a[i];
            p[j] = i;
            ante[i] = p[j - 1];
            if (j > maxim)
                maxim = j, poz = i;
        }
    }
    afisare(poz,ante);
}

int main() {
    fin >> n;
    for (i = 1; i <= n; i++) {
        fin >> a[i];
    }
    lis(a);
}