Cod sursa(job #1386426)

Utilizator maribMarilena Bescuca marib Data 12 martie 2015 22:50:39
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <fstream>
#include <set>
#include <map>
#define INF 0x3f3f3f3f
using namespace std;

int elem, minim, n, v[5001], x, val;

set <int> myset;

set <int> res[5001];

set <int> :: iterator it;

map <int, int> mymap;


void look_for(int poz){
    int init=poz, j;
    for(j=2; j<=elem; ++j){
        //cauta in setul pentru valoarea i+1 dupa pozitia poz
        it=res[j].upper_bound(poz);
        if(it==res[j].end())
            break;
        poz=(*it);
    }
    if(j==elem+1)
        if(minim>poz-init+1)
            minim=poz-init+1;
}

int main()
{
    ifstream in("secv.in");
    ofstream out("secv.out");
    in>>n;
    for(int i=1; i<=n; ++i){
        in>>v[i];
        if(myset.find(v[i])==myset.end()){
            myset.insert(v[i]);
            elem++;
        }
    }
    for(it=myset.begin(); it!=myset.end(); ++it){
        x++;
        val=(*it);
        mymap.insert(pair<int, int>(val, x));
    }
    for(int i=1; i<=n; ++i){
        v[i]=mymap[v[i]];
        res[v[i]].insert(i);
    }
    minim=INF;
    for(int i=1; i<=n; ++i){
        if(v[i]==1){
            look_for(i);
        }
    }
    if(minim==INF)
        minim=-1;
    out<<minim<<"\n";
    in.close();
    out.close();
    return 0;
}