Cod sursa(job #2474817)

Utilizator bmarcuBogdan Marcu bmarcu Data 15 octombrie 2019 20:51:11
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream fin("scmax.in");
ofstream fout ("scmax.out");

int dp[6000001];
int poz[6000001];
int v[6000001];
int a[6000001];

int main () {
    int n, x;
    int dpd = 0;
    int da = 0, m = 6000001;
    int l = 0, r = dpd;
    fin >> n;
    for (int i = 1; i <= n; i++) {
        fin >> v[i];
        int rasp = -1;
        l = 0;
        r = dpd;
        while (l <= r) {
            int mij = (l+r) / 2;
            if (v[i] > dp[mij])
                l = mij + 1, rasp = mij;
            else
                r = mij-1;
        }
        dp[rasp + 1] = v[i];
        poz[i] = rasp + 1;
        if (rasp == dpd)
            dpd++;
    }

    fout << dpd << endl;
    for (int i = n; i >= 1 && dpd > 0; i--) {
        if (poz[i] == dpd){
            da++;
            a[da] = v[i];
            dpd--;
        }
    }

    for (int i = da; i >= 1; i--)
        fout << a[i] << ' ';



}