前敘
一開始我一直以爲這算法叫RMQ,現在才發現這問題叫RMQ,算法是ST表
RMQ-ST表
先給出練手題的地址:LuoguP3865
可以得到:
代碼如下
int n,t,l,r,o,st[100010][20];
int main()
{
n=read();
t=read();
fr(i,1,n)
st[i][0]=read();
fr(i,1,log2(n))
fr(j,1,n-(1<<i)+1)
st[j][i]=max(st[j][i-1],st[j+(1<<(i-1))][i-1]);
while(t--)
{
l=read();
r=read();
o=log2(r-l+1);
printf("%d\n",max(st[l][o],st[r-(1<<o)+1][o]));
}
return 0;
}