【算法模板】RMQ

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43238423/article/details/102531037
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int a[10100];
int f[10100][200];

void ST_prework(int n){
    for(int i=1;i<=n;i++) f[i][0]=a[i];
    int t=log(n)/log(2)+1;
    for(int j=1;j<t;j++)
        for(int i=1; i<=n-(1<<j)+1;i++)
        f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
}
int ST_query(int l,int r)
{
    int k=log(r-l+1)/log(2);
    return max(f[l][k], f[r-(1<<k)+1][k]);
}
int main(void)
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    ST_prework(n);
    int x,r,l;
    scanf("%d",&x);
    while(x--)
    {
        scanf("%d%d",&l,&r);
        cout<<ST_query(l+1,r+1)<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43238423/article/details/102531037