ST表
这里用到了倍增的思想
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int n,m;
int dp[100001][20];
int read(){
int f=1,x=0;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}
return x*f;
}
void rmq_st(int n){
for(int i=1;i<=n;i++)
dp[i][0]=read();
int len=log2(n);
for(int j=1;j<=len;j++)
for(int i=1;i+(1<<j)-1<=n;i++)
dp[i][j]=min(dp[i][j-1],dp[i+(1<<j-1)][j-1]);
}
int rmq_min(int l,int r){
int k=log2(r-l+1);
return min(dp[l][k],dp[r-(1<<k)+1][k]);
}
int main(){
n=read();m=read();
rmq_st(n);
for(int i=1,l,r;i<=m;i++){
l=read();r=read();
printf("%d\n",rmq_min(l,r));
}
return 0;
}