Cod sursa(job #2336060)

Utilizator IOI_MDA_003Sebastian Chicu IOI_MDA_003 Data 4 februarie 2019 19:15:14
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

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

const int N_MAX = 100000 + 5;

int x[N_MAX], p[N_MAX], a[N_MAX], scmax;

int n;

bool cmp(int a, int b){
    return (x[a] < x[b]);
}

void print(int ind){
    if(ind != 0){
        print(p[ind]);
        fout << x[ind] << " ";
    }
}

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

    for(int i = 1; i<=n; ++i){
        int poz = lower_bound(a + 1, a + scmax + 1, i, cmp) - a; // nu se putea pune n fiindcă își dădea seama că nu tot șitul este sortat și se oprea
        scmax = max(scmax, poz);
        p[i] = a[poz-1]; 
        a[poz] = i; // în vectorul a se vor pune indicii, pentru a recreea drumul
    }

    fout << scmax << "\n";
    print(a[scmax]);

    return 0;
}
// român convertit la moldovenism