Pagini recente » Cod sursa (job #2985661) | Borderou de evaluare (job #738897) | Cod sursa (job #1800483) | Cod sursa (job #3231805) | Cod sursa (job #600209)
Cod sursa(job #600209)
const fin = 'rmq.in'; fout = 'rmq.out'; inf = 1000 * 1000 + 1;
type buffer = array[0..1 shl 17] of char;
arbore = array[0..1 shl 18] of longword;
var bufin, bufout : buffer;
arb : arbore;
n ,r ,x ,y : longword;
function min( a, b : longword ) : longword;
begin
if (a < b) then min := a else min := b;
end;
procedure construct( nod, st, dr : longword );
var mij : longword;
begin
if (st = dr) then read( arb[nod] ) else
begin
mij := (st + dr) div 2;
construct( nod * 2, st, mij );
construct( nod * 2 + 1, mij + 1, dr );
arb[nod] := min( arb[nod * 2], arb[nod * 2 + 1] );
end;
end;
procedure querry( nod, st, dr : longword );
var mij : longword;
begin
if (st = dr) then
begin
if (arb[nod] < r) then r := arb[nod];
exit();
end;
mij := (st + dr) div 2;
if (x <= mij) then querry( nod * 2, st, mij );
if (mij < y) then querry( nod * 2 + 1, mij + 1, dr);
end;
procedure main();
var m ,i : longword;
begin
assign( input, fin ); reset( input );
assign( output, fout ); rewrite( output );
settextbuf( input, bufin );
settextbuf( output, bufout );
readln( n, m );
construct( 1, 1, n );
for i := 1 to m do
begin
read( x, y );
r := inf;
querry( 1, 1, n );
write( r, #10 );
end;
end;
begin
main();
end.