Cod sursa(job #1317335)

Utilizator retrogradLucian Bicsi retrograd Data 14 ianuarie 2015 20:20:42
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include<fstream>

using namespace std;

ifstream fin("scmax.in");
ofstream fout("scmax.out");
#define MAXN 100001
#define INF 2000000002

long MAXIME[MAXN], SCM[MAXN], V[MAXN];
int n;

void compute() {
    SCM[n] = 1;
    long lscm = 1;
    MAXIME[1] = V[n];
    MAXIME[0] = INF;
    for(int i=n-1; i; i--) {
        long t = lscm;
        while(MAXIME[t] <= V[i]) t--;
        SCM[i] = t + 1;
        MAXIME[SCM[i]] = max(MAXIME[SCM[i]], V[i]);
        lscm = max(lscm, SCM[i]);
    }
    fout<<lscm<<'\n';
    long last = 0;
    for(int i=1; i<=n; i++) {
        if(SCM[i] == lscm && last < V[i]) {
            fout<<V[i]<<" ";
            lscm--;
            last = V[i];
        }
    }
}

int main() {
    fin>>n;
    for(int i=1; i<=n; i++) {
        fin>>V[i];
    }
    compute();
    return 0;
}