Cod sursa(job #782136)

Utilizator alexarnautuArnautu Alexandru alexarnautu Data 25 august 2012 23:26:50
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;

FILE * iFile;
FILE * oFile;

int a[10010], sol[10010], pre[10010], n;
vector<int> num;

void read()
{
    fscanf(iFile, "%d", &n);

    for(int i=1;i<=n;i++)
        fscanf(iFile, "%d", &a[i]);
}

void solve()
{
    int max, i, j, k;

    sol[1] = 1;
    for(i=2;i<=n;i++)
    {
        max = 0;
        for(j=1;j<i;j++)
        {
            if(a[i] > a[j] && max < sol[j])
                max = sol[j], pre[i] = j;
        }
        sol[i] = 1 + max;
    }
    max = 0;
    for(i=1;i<=n;i++)
        if(max < sol[i])
            max = sol[i], k=i;
    num.push_back(a[k]);
    j = pre[k];
    for(i=1;i<max;i++)
    {
        num.push_back(a[j]);
        j = pre[j];
    }
    sort(num.begin(), num.end());
    fprintf(oFile, "%d\n", max);
    for(i=0;i<max;i++)
        fprintf(oFile, "%d ", num[i]);

}

int main()
{
    iFile = fopen("scmax.in", "r");
    oFile = fopen("scmax.out", "w");

    read();
    solve();

    fclose(iFile);
    fclose(oFile);

    return 0;
}