Cod sursa(job #2591962)

Utilizator mirceamaierean41Mircea Maierean mirceamaierean41 Data 31 martie 2020 19:03:51
Problema Secv Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <fstream>
#include <algorithm>
#include <set>
#include <limits.h>
using namespace std;

ifstream fin("secv.in");
ofstream fout("secv.out");

const int NMAX = 5003;
int n, a, b[NMAX], c[NMAX], maxi, ind_st;

set<int> nr;

int main()
{
	fin >> n;
	fill(b + 1, b + n + 1, INT_MAX);

	for (int i = 1; i <= n; ++i)
	{
		fin >> a;
		nr.insert(a);
		c[i] = lower_bound(b, b + n + 1, a) - b;
		if (c[i] >= maxi)
		{
			maxi = c[i];
			ind_st = i;
		}
		b[c[i]] = a;
	}

	if (maxi != nr.size())
	{
		fout << "-1\n";
		return 0;
	}

	int s_min = n + 1, i = ind_st;

	while (i)
	{
		int crt = maxi, j = i;
		while (maxi)
		{
			if (c[i] == maxi)
			{
				--maxi;
				if (maxi == 0)
				{
					if (j - i + 1 < s_min)
					{
						s_min = j - i + 1;
					}
					break;
				}
			}
			--i;
		}
		--i;
	}

	fout << s_min << "\n";

	return 0;
}