Cod sursa(job #509104)

Utilizator mraresMardare Rares mrares Data 10 decembrie 2010 14:18:50
Problema Secv Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <fstream>
#define nmax 5001
#define INF 100000

using namespace std;

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

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

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])
    {
        if(uz[v[k]]) tru=0;
        else ++uz[v[k]];
        // fout << uz[v[k]] << " " << v[k] << "\n";
        ++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)
        {
            tru = 1;
            lungime = 1;
            start = i;
            for(j=1; j<=n; ++j)
                uz[j] = 0;
            rec(i);
            if(minim>lungime)
            {
                minim = lungime;
                pozi = start;
                pozj = stop;
            }
        }
    /*
    for(i=1; i<=n; ++i)
        fout << l[i] << " ";
    fout << "\n";
    for(i=1; i<=n; ++i)
        fout << leg[i] << " ";
    fout << "\n";
    */
    fout << "-1\n";
    return 0;
}