【模板】ST表

#include<bits/stdc++.h>
#define MAX 30002
using namespace std;
int n,m,ST[MAX][20];
void work()
{
	for(int j=1;1<<j<=n;j++)
	    for(int i=1;i+(1<<j)-1<=n;i++)
		    ST[i][j]=min(ST[i][j-1],ST[i+(1<<j-1)][j-1]);
}
int query(int l,int r)
{
	int x=int(log(r-l+1)/log(2));
	return min(ST[l][x],ST[r-(1<<x)+1][x]);
}
int main()
{
    scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)scanf("%d",&ST[i][0]);
	work();//Do not forget!
	int x1,x2;
	while(m--)
	{
		scanf("%d%d",&x1,&x2);
		printf("%d\n",query(x1,x2));
	}
    return 0;
}
0%