Cod sursa(job #2012452)

Utilizator mihai.alphamihai craciun mihai.alpha Data 18 august 2017 20:29:51
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <stdio.h>

FILE *fin, *fout;

#define MAX_N 100000

int best[MAX_N + 1];
int pre[MAX_N + 1];
int ans[MAX_N + 1], cnt;

int N, v[MAX_N + 1];

int main()  {
    fin = fopen("scmax.in", "r");
    fout = fopen("scmax.out", "w");
    fscanf(fin, "%d", &N);
    for(int i = 1;i <= N;i++)
        fscanf(fin, "%d", &v[i]);
    best[1] = 1;
    pre[1] = 1;
    for(int i = 2;i <= N;i++)  {
        for(int j = 1;j < i;j++)
            if(v[i] > v[j] && best[j] + 1 > best[i])
                best[i] = best[j] + 1, pre[i] = j;
    }
    int gd = 0, ind;
    for(int i = 1;i <= N;i++)
        gd = (best[i] > gd) ? (best[i], ind = i) : gd;
    fprintf(fout, "%d\n", gd);
    ans[++cnt] = ind;
    while(ind > 1)  {
        ind = pre[ind];
        ans[++cnt] = ind;
    }
    if(ans[cnt] == 0)
        cnt--;
    for(int i = cnt;i >= 1;i--)
        fprintf(fout, "%d ", v[ans[i]]);
    fclose(fin);
    fclose(fout);
    return 0;
}