Cod sursa(job #1412431)

Utilizator ButnaruButnaru George Butnaru Data 1 aprilie 2015 12:01:03
Problema Range minimum query Scor 30
Compilator fpc Status done
Runda Arhiva educationala Marime 0.91 kb
program rmqq;
type tabel=array[0..14,0..100001] of longint;
     tabb=array[0..100001] of longint;
     buf=array[0..1 shl 17] of byte;
var ff1,ff2:buf; rmq:tabel;
    v:tabb; n,m,i,j,x,y,aux:longint;
    f1,f2:text;
function min(a,b:longint):longint;
begin
if a>b then min:=b else min:=a;
end;
function query(x,y:longint):longint;
var dif,aux:longint;
begin
dif:=v[y-x+1]; aux:=1 shl dif;
query:=min(rmq[dif,x],rmq[dif,y-aux+1]);
end;
begin
assign (f1,'rmq.in');
assign (f2,'rmq.out');
reset (f1);
rewrite (f2);
settextbuf(f1,ff1);
settextbuf(f2,ff2);
readln (f1,n,m);
for i:=1 to n do readln (f1,rmq[0,i]);
for i:=2 to n do v[i]:=v[i div 2]+1;
i:=1;
while 1 shl i<=n do begin
aux:=1 shl (i-1); j:=1;
while j+aux<=n do begin
rmq[i,j]:=min(rmq[i-1,j],rmq[i-1,j+aux]);
j:=j+1;
end;
i:=i+1;
end;
for i:=1 to m do begin
readln (f1,x,y);
writeln (f2,query(x,y));
end;
close (f1);
close (f2);
end.