Cod sursa(job #2012463)

Utilizator mihai.alphamihai craciun mihai.alpha Data 18 august 2017 20:41:38
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 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]);
    for(int i = 1;i <= N;i++)  {
        best[i] = 1;
        pre[i] = -1;
        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++)
        ind = (best[i] > gd) ? (i) : ind, gd = (best[i] > gd) ? (best[i]) : gd;
    fprintf(fout, "%d\n", gd);
    ans[++cnt] = ind;
    while(ind > 1)  {
        ind = pre[ind];
        ans[++cnt] = ind;
    }
    if(v[ans[cnt]] == 0)
        cnt--;
    for(int i = cnt;i >= 1;i--)
        fprintf(fout, "%d ", v[ans[i]]);
    fclose(fin);
    fclose(fout);
    return 0;
}