Cod sursa(job #1327053)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 26 ianuarie 2015 12:38:26
Problema Secv Scor 100
Compilator cpp Status done
Runda simulareoji2015 Marime 1.53 kb
#include <fstream>
#include <map>

#define NMAX 5000
using namespace std;

int n;
int v[NMAX+5];

map<int,int> harta;
int frecv[NMAX+5];

int din[NMAX+5];

int main()
{
    ifstream cin("secv.in");
    ofstream cout("secv.out");

    cin>>n;
    for(int i=1;i<=n;i++) {
        cin>>v[i];
        harta[v[i]]=1;
    }

    int m,i;
    map<int,int>::iterator it;
    for(i=1,it=harta.begin();it!=harta.end();it++,i++) {
        it->second=i;
        m=i;
    }

    for(i=1;i<=n;i++)
        v[i]=harta[v[i]];

    /*int best=NMAX+5,j,searched;
    for(i=1;i<=n;i++)
        if(v[i]==1) {
            searched=2;
            for(j=i+1;j<=n;j++)
                if(v[j]==searched) {
                    searched++;
                    if(searched==m+1)
                        break;
                }

            if(searched<m+1)
                continue;
            if(j-i+1<best)
                best=j-i+1;
        }*/ //BRUT

    for(i=0;i<=m;i++)
        frecv[i]=-1;
    for(i=1;i<=n;i++)
        din[i]=-1;

    for(i=1;i<=n;i++) {
        if(frecv[v[i]-1]!=-1)
            din[i]=din[frecv[v[i]-1]];
        else if(v[i]==1)
            din[i]=i;
        else
            din[i]=-1;
        frecv[v[i]]=i;
    }

    int best=NMAX+5;
    for(int i=1;i<=n;i++)
        if(v[i]==m && din[i]!=-1 && i-din[i]+1<best)
            best=i-din[i]+1;

    if(best==NMAX+5)
        cout<<"-1\n";
    else
        cout<<best<<'\n';

    cin.close();
    cout.close();
    return 0;
}