Cod sursa(job #782493)

Utilizator repp4raduRadu-Andrei Szasz repp4radu Data 28 august 2012 02:05:25
Problema Secv Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <fstream>
#include <algorithm>
#include <vector>

#define MAX 8192
#define INF 0x3f3f3f3f

using namespace std;

int v[MAX], aux[MAX], norm[MAX], n, minim = INF;
vector< pair < int , int > > sol;

void normalize()
{
    sort(aux + 1, aux + n + 1);
    for(int i = 1; i <= n; i++)
    {
        if(aux[i] == norm[norm[0]]) continue;
        norm[++norm[0]] = aux[i];
    }
    for(int i = 1; i <= n; i++)
        v[i] = lower_bound(norm + 1, norm + norm[0] + 1, v[i]) - norm;
}

int main()
{
    ifstream in("secv.in"); in>>n;
    for(int i = 1; i <= n; i++)
    {
        in>>v[i]; aux[i] = v[i];
    }
    normalize();
    for(int i = 1; i <= n; i++)
    {
        if(v[i] == 1)
        {
            if(sol.size() >= 1 && sol[sol.size() - 1].first == 2)
                sol[sol.size() - 1].second = i;
            else
                sol.push_back(make_pair(2, i));
        }
        else
        {
            for(int j = 0; j < sol.size(); j++)
            {
                if(v[i] == sol[j].first)
                {
                    sol[j].first++;
                    if(sol[j].first > norm[0])
                    {
                        minim = min(minim, i - sol[j].second + 1);
                        sol.erase(sol.begin() + j);
                        j--;
                    }
                }
            }
        }
    }
    ofstream out("secv.out");
    out<<(minim == INF ? -1 : minim);
    out.close();
    return 0;
}