RMQ&ST笔记

概念

RMQ是英文Range Maximum(Minimum) Query的缩写,顾名思义是用来求某个区间内的最大值或最小值,通常用在要多次询问一些区间的最值的问题中。

代码

uses math;
Var n,m,i,j,k,r,l:longint;
    f:array[0..100001,0..21] of longint;
Begin
        read(n,m);
        for i:=1 to n do
                read(f[i][0]);
        for j:=1 to trunc(ln(n)/ln(2)) do
        Begin
                for i:=1 to n+1-(1 shl j) do
                Begin
                        f[i][j]:=max(f[i][j-1],f[i+(1 shl (j-1))][j-1]);
                end;
        end;

        for i:=1 to m do
        Begin
                read(l,r);
                k:=trunc(ln(r-l+1)/ln(2));
                writeln(max(f[l][k],f[r-(1 shl k)+1][k]));
        end;
end.


发布了23 篇原创文章 · 获赞 37 · 访问量 9069

猜你喜欢

转载自blog.csdn.net/weixin_41221124/article/details/95653795