Cod sursa(job #1366857)

Utilizator ButnaruButnaru George Butnaru Data 1 martie 2015 14:15:42
Problema Range minimum query Scor 80
Compilator fpc Status done
Runda Arhiva educationala Marime 0.88 kb
program rmqq;
type
tabel=array[0..18,0..100001] of longint;
tab=array[0..100001] of longint;
buf=array[0..50001] of char;
var
ff1,ff2:buf; rmq:tabel; v:tab;
n,m,i,j,aux,l,x,y:longint;
f1,f2:text;
function min(a,b:longint):longint;
begin
if a<b then min:=a else min:=b;
end;
function query(x,y:longint):longint;
begin
aux:=v[y-x+1]; l:=1 shl aux;
query:=min(rmq[aux,x],rmq[aux,y-l+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 read (f1,rmq[0,i]);
i:=1;
while 1 shl i<=n do begin
j:=1; aux:=1 shl (i-1);
while j+1 shl i-1<=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:=2 to n do
v[i]:=v[i div 2]+1;
for i:=1 to m do begin
readln (f1,x,y);
writeln (f2,query(x,y));
end;
close (f1);
close (f2);
end.