RMQ(st)


int dp[1111][12];
int a[1111];
int n;

void RMQ_init()
{
    for(int i=1;i<=n;i++)
    {
        dp[0]=a;
    }
    for(int j=1;(1<<j)<=n;j++)
    {
        for(int i=1;i+(1<<j)-1<=n;i++)
        {
            int m=(1<<(j-1))+i;
            dp[j]=max(dp[j-1],dp
[j-1]);
        }
    }
}

int RMQ(int L,int R)
{
    int k=0;
    while((1<<k)<=R-L+1) k++;
    k--;
    return max(dp[L][k],dp[R-(1<<k)+1][k]);
}

原文地址:https://www.cnblogs.com/CKboss/p/3351009.html