首页 > 其他 > 详细

RMQ 模板 2012-09-13

时间:2016-03-02 22:04:23      阅读:214      评论:0      收藏:0      [点我收藏+]

Program Stone;

var i,j,k,l,n,m,xmi,big,sma:longint;

    h:array[1..50000]of longint;

    tf:array[0..16]of longint;

    max,min:array[1..50000,0..16]of longint;

 function wmax(a,b:longint):longint;

  begin

   if a>b then wmax:=a else wmax:=b;

  end;

 function wmin(a,b:longint):longint;

  begin

   if a<b then wmin:=a else wmin:=b;

  end;

Begin

 assign(input,‘lineup.in‘);assign(output,‘lineup.out‘);

 reset(input);rewrite(output);

  readln(n,m);

  for i:=1 to n do

   begin

    readln(h[i]);

    max[i,0]:=h[i];

    min[i,0]:=h[i];

   end;

  for j:=1 to trunc(ln(n)/ln(2)) do

   for i:=1 to n do

    begin

     max[i,j]:=wmax(max[i,j-1],max[i+1 shl (j-1),j-1]);

     min[i,j]:=wmin(min[i,j-1],min[i+1 shl (j-1),j-1]);

    end;

  for i:=1 to m do

   begin

    readln(j,k);

    l:=trunc(ln(k-j+1)/ln(2));

    big:=wmax(max[j,l],max[k-1 shl l+1,l]);

    sma:=wmin(min[j,l],min[k-1 shl l+1,l]);

    writeln(big-sma);

   end;

 close(input);close(output);

end.

RMQ 模板 2012-09-13

原文:http://www.cnblogs.com/yesphet/p/5236528.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!