Pagini recente » Cod sursa (job #327711) | Cod sursa (job #2591029) | Cod sursa (job #2600812) | Cod sursa (job #416726) | Cod sursa (job #782493)
Cod sursa(job #782493)
#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;
}