Cod sursa(job #2261347)

Utilizator OvidiuDestulDeOkNicoleanu Ovidiu OvidiuDestulDeOk Data 16 octombrie 2018 10:25:23
Problema Subsir crescator maximal Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>

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

int n, maxim;
int v[100001], lis[100001], urm[100001];

void read();
void pd();
void print();
int main()
{
    read();
    pd();
    print();
    return 0;
}

void read(){
    int i;
    fin >> n;
    for(i = 0; i < n; i++)
        fin >> v[i];
    lis[n - 1] = 0; urm[n - 1] = 0;
}

void pd(){
    int i, j;
    for(i = n - 2, maxim = -1; i >= 0; i--, maxim = -1){
        for(j = i + 1; j < n; j++){
            if(lis[j] > maxim && v[i] < v[j]){
                maxim = lis[j];
                lis[i] = 1 + lis[j];
                urm[i] = j;
            }
        }
    }
    for(i = 0; i < n; i++){
        if(lis[i] > maxim){
            maxim = i;
        }
    }
}

void print(){
    int i;
    fout << lis[maxim] + 1 << '\n';
    for(i = maxim; urm[i] != 0;){
        fout << v[i] << ' ';
        i = urm[i];
    }
    fout << v[i]  << '\n';
}