Cod sursa(job #413277)

Utilizator dragos.denaDena Dragos dragos.dena Data 8 martie 2010 01:14:27
Problema Subsir crescator maximal Scor 30
Compilator c Status done
Runda Arhiva educationala Marime 1.06 kb
#include <stdio.h>
#define VEC_MAX 100000

int main(int argc, char** argv){
    freopen("scmax.in", "r", stdin);
    freopen("scmax.out", "w", stdout);
    int n, v[VEC_MAX],i, j,a[VEC_MAX], sub[VEC_MAX],maxl, maxg, lastg;
    scanf("%d", &n);
    for(i = 0; i < n; i++) scanf("%d", &v[i]);
    a[0] = 1;
    maxg = 1;
    lastg = 0;

    for(i = 1; i < n; i++){
        a[i] = 0;
        maxl = 0;
        for(j = i - 1; j >= 0; j--){
            if(a[j] > maxl && v[i] > v[j]){
                maxl = a[j];
            }
            if(maxl > maxg) break;
        }
        a[i] = maxl + 1;
        if(maxl > maxg){
            lastg = i;
            maxg = maxl + 1;
        }
    }

    sub[0] = v[lastg];
    j = 1;
    maxl = maxg;
    maxg--;
    for(i = lastg - 1; i >= 0; i--){
        if(v[i] < v[lastg] && a[i] == maxg){
            sub[j] = v[i];
            maxg--;
            lastg = i;
            j++;
        }
    }
    printf("%d\n", maxl);
    for(i = maxl - 1; i>=0; i--)
        printf("%d ", sub[i]);
    return 0;
}