Cod sursa(job #509097)

Utilizator mraresMardare Rares mrares Data 10 decembrie 2010 13:58:24
Problema Secv Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <fstream>
#define nmax 500
#define INF 100000

using namespace std;

ifstream fin("secv.in");
ofstream fout("secv.out");

int l[nmax], v[nmax], leg[nmax], uz[nmax];
int n, maxim, lmax, m, minim, lungime, pozi, pozj, start, stop;

void praaa()
{
    int i, j, poz;
    l[n] = 1;
    for(i=n-1; i>=1; --i)
    {
        maxim = 0;
        for(j=i+1; j<=n; ++j)
            if(v[i]<v[j] && l[j]>=maxim)
            {
                maxim = l[j];
                poz = j;
            }
        l[i] = maxim+1;
        leg[i] = poz;
        if(l[i] > lmax) lmax = l[i];
    }
}

void rec(int k)
{
    if(leg[k])
    {
        ++uz[v[k]];
        ++lungime;
        stop = leg[k];
        rec(leg[k]);
    }
}

int main()
{
    int i, j;
    minim = INF;
    fin >> n;
    for(i=1; i<=n; ++i)
        fin >> v[i];
    praaa();
    for(i=1; i<=n; ++i)
        if(l[i] == lmax)
        {
            lungime = 1;
            start = i;
            for(j=1; j<=n; ++j)
                uz[j] = 0;
            rec(i);
            if(minim>lungime)
            {
                minim = lungime;
                pozi = start;
                pozj = stop;
            }
        }
    if(n==1)
        if(minim==1)
        {
            fout << 1 << "\n";
            return 0;
        }
    if(pozi && pozj)
        fout << pozj-pozi+1 << "\n";
    return 0;
}