Pagini recente » Cod sursa (job #3325854) | Cod sursa (job #2063072) | Cod sursa (job #1079895) | Cod sursa (job #299315) | Cod sursa (job #3345635)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("secv.in");
ofstream fout("secv.out");
#define INF INT_MAX
int n;
struct vp
{
long long val; int poz, nr;
}v[5001];
int dp[5001][5001];
bool cmp(vp a, vp b)
{
return a.val<b.val;
}
bool cmp1(vp a, vp b)
{
return a.poz<b.poz;
}
vector<int> gr[5001];
int main()
{
fin>>n;
for (int i=1; i<=n; i++)
{
fin>>v[i].val;
v[i].poz=i;
}
sort(v+1, v+n+1, cmp);
int cnt=0;
v[0].val=-1;
for (int i=1; i<=n; i++)
{
if (v[i].val!=v[i-1].val)
{
cnt++;
}
v[i].nr=cnt;
}
sort(v+1, v+n+1, cmp1);
for (int i=1; i<=n; i++)
{
gr[v[i].nr].push_back(i);
}
for (int i=cnt; i>=1; i--)
{
int pt=0;
for (int j=0; j<gr[i].size(); j++)
{
if (i==cnt)
{
dp[i][j]=gr[i][j];
}
else
{
while (pt<gr[i+1].size() and gr[i][j]>gr[i+1][pt])
{
pt++;
}
if (pt>=gr[i+1].size())
{
dp[i][j]=INF;
}
else
{
dp[i][j]=dp[i+1][pt];
}
}
}
}
int lungmin=INF;
for (int j=0; j<gr[1].size(); j++)
{
lungmin=min(lungmin, dp[1][j]-gr[1][j]+1);
}
if (lungmin==INF)
{
fout<<-1; return 0;
}
fout<<lungmin;
return 0;
}