Cod sursa(job #2776343)

Utilizator AswVwsACamburu Luca AswVwsA Data 19 septembrie 2021 13:46:37
Problema Secv Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <fstream>
#include <set>
using namespace std;
ifstream cin("secv.in");
ofstream cout("secv.out");
int v[5005], urm[5005], l[5005];
set <int> s;
int main()
{
    int n, poz, 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] + 1)
                {
                    l[i] = l[j] + 1;
                    if (!urm[j])
                        urm[i] = j;
                    else
                        urm[i] = urm[j];
                }
    }
    bool ok = 1;
    for (i = 1; i <= n; i++)
        if (l[i] == s.size())
        {
            ok = 0;
            int st = i, dr = urm[i];
            if (first == -1)
            {
                first = st;
                last = dr;
            }
            else if (last - first > dr - st)
            {
                first = st;
                last = dr;
            }
        }
    if (ok)
    {
        cout << -1;
        return 0;
    }
    cout << last - first + 1;
}