Cod sursa(job #2776335)

Utilizator AswVwsACamburu Luca AswVwsA Data 19 septembrie 2021 13:19:53
Problema Secv Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <fstream>
#include <set>
using namespace std;
ifstream cin("secv.in");
ofstream cout("secv.out");
int v[1005], urm[1005], l[1005];
set <int> s;
void simul(int &st, int &dr, int poz)
{
    st = poz;
    while (poz)
    {
        dr = poz;
        poz = urm[poz];
    }
}
int main()
{
    int n, poz, lmax = 0, first, last, i, j;
    first = last = -1;
    cin >> n;
    if (n == 0)
    {
        cout << -1;
        return 0;
    }
    for (i = 1; i <= n; i++)
    {
        cin >> v[i];
        s.insert(v[i]);
    }
    urm[n] = 0;
    l[n] = 1;
    for (i = n - 1; i >= 0; i--)
    {
        urm[i] = 0;
        l[i] = 1;
        for (j = i + 1; j <= n; j++)
            if (v[i] < v[j])
                if (l[i] <= l[j])
                {
                    l[i] = l[j] + 1;
                    urm[i] = j;
                }
    }
    for (i = 1; i <= n; i++)
        if (lmax < l[i])
        {
            lmax = l[i];
            poz = i;
        }
    if (lmax != s.size())
    {
        cout << -1;
        return 0;
    }
    for (i = 1; i <= n; i++)
        if (lmax == l[i])
        {
            int st, dr;
            simul(st, dr, i);
            if (first == -1)
            {
                first = st;
                last = dr;
            }
            else if (last - first > dr - st)
            {
                first = st;
                last = dr;
            }
        }
    cout << last - first + 1;
}