Cod sursa(job #751397)

Utilizator SteveStefan Eniceicu Steve Data 25 mai 2012 22:56:02
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.57 kb
#include <fstream>
#include <algorithm>

using namespace std;

typedef struct {
	int a;
	int b;
} cutzu;

int N;
cutzu v[5010];
int x[5010];

void Citire ()
{
	ifstream fin ("secv.in");
	fin >> N;
	for (int i = 0; i < N; i++)
	{
		fin >> v[i].a;
		v[i].b = i;
	}
	fin.close ();
}

inline int cmp (cutzu x, cutzu y)
{
	return (x.a < y.a);
}

int dog = 1;

void Normalize ()
{
	sort (v, v + N, cmp);
	int aux = v[0].a;
	x[v[0].b] = 1;
	for (int i = 1; i < N; i++)
	{
		if (v[i].a > aux)
		{
			dog++;
			aux = v[i].a;
		}
		x[v[i].b] = dog;
	}
}

int Business ()
{
    int minuscul = 50100;
    dog++;
	int i, j = 0;
	int siruri[5010][2];
	for (i = 0; i < N; i++)
	{
		if (x[i] == 1) break;
	}
    siruri[0][0] = i;
    siruri[0][1] = 2;
    for (; i < N; i++)
    {
        if (x[i] == 1)
        {
            siruri[++j][0] = i;
            siruri[j][1] = 2;
        }
        else
        {
            for (int k = 0; k <= j; k++)
            {
                if (siruri[k][1] == x[i])
                {
                    siruri[k][1]++;
                    if (siruri[k][1] == dog && i - siruri[k][0] < minuscul) minuscul = i - siruri[k][0];
                }
            }
        }
    }
    return minuscul;
}

void Scriere ()
{
    ofstream fout ("secv.out");
	if (N == 1)
	{
		fout << "1";
		fout.close ();
		return;
	}
    int y = Business ();
    if (y == 50100) fout << "-1";
    else fout << y + 1;
    fout.close ();
}

int main ()
{
	Citire ();
	Normalize ();
	Scriere ();
	return 0;
}