Cod sursa(job #2127085)

Utilizator _Victor_Victor Ciobanu _Victor_ Data 10 februarie 2018 12:15:13
Problema Cifra Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.12 kb
Program secv3;
type mp = 0..1000000;
long =-1000000000000000..1000000000000000;
tab =array[mp] of long;
var p1,p2,n,i:mp;
a: tab;
f,g:text;
function max(a,b:long):long;
begin
 if a>b then
  max:=a
  else
  max:=b;
end;
function min(a,b:long):long;
begin
 if a<b then
  min:=a
  else
  min:=b;
end;
function dif(a,b,c:long):long;
begin
 dif:=max(a,max(b-a,c-b)) - min(a,min(b-a,c-b));
end;
Procedure par(var p1f,p2f:mp;n:mp;a:tab);
var d,d1,d2:long;
p1,p2:mp;
begin
p2:=1;
p1:=1;
for p1:=1 to n-2 do begin
 if p2<=p1 then
  p2:=p1+1;
 while ((a[p2]-a[p1]) < a[p1]) and (p2 < n) do
  p2:=p2+1;
 //p2:=p2-1;
 d1:=dif(a[p1],a[p2],a[n]);
 if (d1 < d) then begin
   d:=d1;
   p1f:=p1;
   p2f:=p2;
  end;
 if p2-1<>p1 then begin
 d2:=dif(a[p1],a[p2-1],a[n]);
  if (d2 < d) then begin
   d:=d2;
   p1f:=p1;
   p2:=p2-1;
   p2f:=p2;
  end;
 end;
end;
end;
begin
assign(f,'3secv.in');
assign(g,'3secv.out');
reset(f);
rewrite(g);
readln(f,n);
for i:=1 to n do begin
 read(f,a[i]);
 if i>1 then
  a[i]:=a[i-1]+a[i];
 end;
 par(p1,p2,n,a);
writeln(g,p1,' ',p2);
close(f);
close(g);
end.