RMQ-ST表

前敘

一開始我一直以爲這算法叫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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章