Pagini recente » Cod sursa (job #764126) | Cod sursa (job #1527047) | Cod sursa (job #2699521) | Cod sursa (job #1160816) | Cod sursa (job #2222176)
#include <bits/stdc++.h>
#define El 2000000000
#define Dim 5001
using namespace std;
ifstream f("secv.in");
ofstream g("secv.out");
long Sir[Dim],n,maxim,Dist[Dim],L=Dim;
long Gasite[Dim],minim=El+1;
int main()
{
f>>n;
for(int i=1;i<=n;i++)
{
f>>Sir[i];
maxim=max(maxim,Sir[i]);
Dist[i]=5005;
}
Dist[n]=1; Gasite[n]=1;
for(long i=n;i>=1;i--)
for(long j=i+1;j<=n;j++)
{
if(Sir[i]<maxim&&Sir[i]+1==Sir[j])
{
if(Sir[i]<minim) minim=Sir[i];
if(Dist[i]==5005&&Dist[j]==5005)
Dist[i]=j-i+1;
else
if(Dist[i]==5005&&Dist[j]!=5005)
Dist[i]=Dist[j]+j-i,Gasite[i]=Gasite[j]+1;
else
{
if((Dist[i]<Dist[j]+j-i)&&Gasite[i]==5005)
Dist[i]=Dist[j]+j-i,Gasite[i]=Gasite[j]+1;
else
if((Dist[i]<Dist[j]+j-i)&&Gasite[i]!=0&&Gasite[j]+1>Gasite[i])
Dist[i]=Dist[j]+j-i,Gasite[i]=Gasite[j]+1;
}
}
else
if(Sir[i]==maxim)
{
Dist[i]=1,Gasite[i]=1;
if(Sir[i]<minim) minim=Sir[i];
}
}
for(int i=1;i<=n;i++)
if(Sir[i]==minim&&Dist[i]<L&&Gasite[i]==maxim-minim+1) L=Dist[i];
if(L!=5001) g<<L;
else g<<-1;
return 0;
}