【算法模板】RMQ

#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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章