Cod sursa(job #1816474)

Utilizator Coroian_DavidCoroian David Coroian_David Data 26 noiembrie 2016 15:34:54
Problema Secv Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <cstdio>

using namespace std;

FILE *f, *g;

struct numere
{
    int lx, en;
};

numere  l[5001];

int n, v[5001], mn = 9999, cnt,dif[5001];

void readFile()
{
    f = fopen("secv.in", "r");

    fscanf(f, "%d", &n);

    int i, j;

    bool ok;

    for(i = 1; i <= n; i ++)
    {
        fscanf(f, "%d", &v[i]);

        ok = 1;

        for(j = 1; (j <= cnt) && (ok == 1); j ++)
        {
            if(dif[j] == v[i])
                ok = 0;

        }

        if(ok == 1)
            dif[++ cnt] = v[i];
    }

    fclose(f);
}

void solve()
{
    l[n].lx = 1;
    l[n].en = n;

    int i,j;



    for(i = n - 1; i >= 1; i --)
    {
        l[i].lx = 1;
        l[i].en = i;


        for(j = i + 1; j <= n; j ++)
        {
            if(v[i] < v[j])
            {
                if(l[i].lx < l[j].lx + 1)
                {
                    l[i].lx = l[j].lx + 1;

                    l[i].en = l[j].en;
                }
            }
        }
    }

    for(i = 1; i <= n; i ++)
    {
        if(l[i].lx == cnt)
        {
            if(l[i].en - i + 1 < mn)
                mn = l[i].en - i + 1;
        }
    }
}

void printFile()
{
    g = fopen("secv.out", "w");

    fprintf(g, "%d\n", mn);

    fclose(g);
}

int main()
{
    readFile();

    solve();

    printFile();

    return 0;
}