Cod sursa(job #2466831)

Utilizator bogdan2604Bogdan Dumitrescu bogdan2604 Data 2 octombrie 2019 23:30:30
Problema Secv Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("secv.in");
ofstream g("secv.out");

int n,i,j,sz,marime[5001],v[5001],mn = 2000000005;
map <int,bool> ap,ap_verif;

bool verif()
{
    for(map<int,bool>::iterator itr = ap.begin(); itr != ap.end(); ++ itr)
        if(ap_verif.find(itr -> first) == ap_verif.end())
            return 0;
    return 1;
}
int afla_poz(int poz)
{
    ap_verif[v[poz]] = 1;
    for(i = poz - 1; i >= 1; -- i)
    {
        ap_verif[v[i]] = 1;
        if(v[i] == mn && verif())
            return i;
    }
}

int main()
{
    f >> n;
    for(i = 1; i <= n; ++ i)
    {
        f >> v[i];
        ap[v[i]] = 1;
        if(v[i] < mn)
            mn = v[i];
    }
    sz = ap.size();
    for(i = 1; i <= n; ++ i)
        marime[i] = 1;
    for(i = 1; i <= n; ++ i)
        for(j = 1; j < i; ++ j)
            if(v[i] > v[j])
            {
                marime[i] = max(marime[i], marime[j] + 1);
                if(marime[i] == sz)
                {
                    g << i - afla_poz(i) + 1;
                    return 0;
                }
            }
    g << -1;
}