Cod sursa(job #758788)

Utilizator MarquiseMarquise Marquise Data 16 iunie 2012 12:58:42
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <cstdio>
#define NMAX 100001

using namespace std;

int n, v[NMAX], next[NMAX], r[NMAX];

int main()
{
    int i, j, max = 0, poz = 0;
    FILE *in = fopen("scmax.in", "r");
    FILE *out = fopen("scmax.out", "w");

    fscanf(in, "%d", &n);
    for ( i = 0; i < n; i++)
    {
            fscanf(in, "%d", &v[i] );
            next[i] = -1;
            r[i] = 1;
    }
    
    
    for ( i = n - 1; i >= 0; i--)
    {
        for ( j = i + 1; j < n; j++)
            if ( v[i] < v[j] && r[i] < r[j] + 1)
            {
                 r[i] = r[j] + 1;
                 next[i] = j;
            }
    }

    
    for ( i = 0; i < n; i++)
        if ( r[i] > max)
        {
             max = r[i];
             poz = i;
        } 
    
    fprintf(out, "%d\n", max);
    
    while (poz != -1)
    {
          fprintf(out, "%d ", v[poz]);
          poz = next[poz];
    }

    fclose(in);
    fclose(out);
    return 0;
}