Cod sursa(job #832097)

Utilizator PatrikStepan Patrik Patrik Data 9 decembrie 2012 20:44:06
Problema Secv Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
    #include<cstdio>
    using namespace std;
    int n , v[5001] , l[5001] , poz[5001]  , nr , p , max  ;
    bool viz[2000000001];

    void citire();
    void solve();
    void tipar();

    int main()
    {
        citire();
        solve();
        tipar();
        return 0;
    }

    void citire()
    {

        freopen("secv.in" , "r"  , stdin );
        scanf("%d" , &n );
        nr = n;
        for( int i = 1 ; i<= n ; ++i )
        {
            scanf("%d" , &v[i] );
            if(viz[v[i]])nr--;
            else
            viz[v[i]] = 1;
        }
    }

    void solve()
    {
        l[n] = 1;
        max = 1;
        for( int i = n-1 ; i ; i-- )
        {
            for( int j = i+1 ; j <= n ; ++j )
                if(v[i] < v[j] && l[j] + 1 > l[i])
                {
                    l[i] = l[j] + 1 ;
                    poz[i] = j;
                }
            if(max < l[i])
            {
                max = l[i];
                p = i;
            }
        }
    }

    void tipar()
    {
        freopen("secv.out" , "w" , stdout );
        if(max < nr )
            printf("-1");
        else
            {
                int x = p;
                while(poz[x] != 0)
                    x = poz[x];
                printf("%d" , x-p+1);
            }

    }