Pagini recente » Cod sursa (job #567277) | Cod sursa (job #1842470) | Cod sursa (job #537319) | Cod sursa (job #787649) | Cod sursa (job #497561)
Cod sursa(job #497561)
program secv;
type element=record
val, poz:longint;
end;
var f, g:text;
rez, max, n, poz1, poz2:longint;
nr:array[0..5000] of longint;
v:array[0..5000] of element;
procedure citire;
var i:longint;
begin
read(f,n);
for i:=1 to n do
begin
read(f,v[i].val);
v[i].poz:=i;
if max<v[i].val then
max:=v[i].val;
end;
end;
function mai_mic(a,b:element):boolean;
begin
if a.val<b.val then
mai_mic:=true
else
if (a.val=b.val) and (a.poz<b.poz) then
mai_mic:=true
else
mai_mic:=false;
end;
function pozitionare(i,j:longint):longint;
var x:element;
begin
x:=v[i];
while i<j do
begin
while (j>i) and (mai_mic(x,v[j])) do
j:=j-1;
v[i]:=v[j];
while (i<j) and (mai_mic(v[i],x)) do
i:=i+1;
v[j]:=v[i];
end;
v[i]:=x;
pozitionare:=i;
end;
procedure Qsort(st,dr:longint);
var m:longint;
begin
m:=pozitionare(st,dr);
if st<m-1 then
Qsort(st,m-1);
if m+1<dr then
Qsort(m+1,dr);
end;
procedure rezolvare;
var x:longint;
begin
poz2:=1;
while (v[poz2].val=v[1].val) and (poz2<n) do
begin
nr[poz2]:=1;
poz2:=poz2+1;
end;
poz1:=1;
rez:=maxlongint;
nr[0]:=maxlongint;
while poz2<=n do
begin
poz1:=poz2;
while v[poz1].val=v[poz2].val do
poz1:=poz1-1;
x:=v[poz1].val;
while (v[poz1].val=x) and (v[poz1].poz>v[poz2].poz) do
poz1:=poz1-1;
if v[poz1].val<>x then
nr[poz2]:=maxlongint
else
if nr[poz1]<>maxlongint then
nr[poz2]:=nr[poz1]+v[poz2].poz-v[poz1].poz
else
nr[poz2]:=maxlongint;
if (v[poz2].val=max) and (nr[poz2]<rez) then
rez:=nr[poz2];
poz2:=poz2+1;
end;
end;
begin
assign(f,'secv.in'); reset(f);
assign(g,'secv.out'); rewrite(g);
citire;
if n<2 then
begin
writeln(g,n);
close(g);
halt;
end;
Qsort(1,n);
rezolvare;
if rez=maxlongint then
writeln(g,'-1')
else
writeln(g,rez);
close(f);
close(g);
end.