RMQ-ST表

xiaoxiao2021-02-28  130

前叙

一开始我一直以为这算法叫RMQ,现在才发现这问题叫RMQ,算法是ST表

RMQ-ST表

先给出练手题的地址:LuoguP3865

sti,j 表示以第 i 个数为首的一共2j个数的最大值

gi 表示原数列

可以得到: sti,j={gimax{sti,j1,sti+2j1,j1}j=1j1

代码如下

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; }
转载请注明原文地址: https://www.6miu.com/read-23264.html

最新回复(0)