Pagini recente » Cod sursa (job #2391344) | simulare_oji_2023_clasa_9_15_martie | Cod sursa (job #3219944) | Cod sursa (job #3240627) | Cod sursa (job #176508)
Cod sursa(job #176508)
#include<fstream.h>
int poz (long a[5002], int p, int u)
{
int piv=a[p],aux;
while (p<u)
{
if (a[p]>a[u]) {
aux=a[p];
a[p]=a[u];
a[u]=aux;
}
if (piv==a[p]) u--;
else p++;
}
return p;
}
void quick(long a[5002], int p, int u)
{
int k;
if (p<u) {
k=poz(a,p,u);
quick(a,p,k-1);
quick(a,k+1,u);
}
}
int main()
{
int t ,max,p,n,j,i,k=0,pp[5002],nro[5002],sw,tat[5002];
long v[5002],a[5002];
ifstream f("secv.in");
f>>n;
for (i=1;i<=n;i++) f>>v[i];
f.close();
for (i=1;i<=n;i++) a[i]=v[i];
quick(a,1,n);
k=1;
for (i=2;i<=n;i++) if (a[i]!=a[i-1]) k++;
nro[1]=pp[1]=1;tat[1]=0;
for (i=2;i<=n;i++)
{
t=0;max=0;
for (j=i-1;j>=1;j--) if (v[i]>v[j] && max<nro[j]) {
max=nro[j];
t=j;
p=pp[j];
}
if (max==0) {
nro[i]=1;
tat[i]=0;
pp[i]=i;
}
else{
nro[i]=nro[t]+1;
tat[i]=t;
pp[i]=p;
}
}
int min=5001;
for (i=n;i>=k;i--)
if (nro[i]==k && i-pp[i]+1<min) min=i-pp[i]+1;
ofstream g("secv.out");
if (min<5001) g<<min;
else g<<-1;
g.close();
return 0;
}