Cod sursa(job #2261376)

Utilizator OvidiuDestulDeOkNicoleanu Ovidiu OvidiuDestulDeOk Data 16 octombrie 2018 10:35:26
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 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 = 1; i <= n; i++)
        fin >> v[i];
    lis[n] = 0; urm[n] = 0;
}

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

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