ST算法Code:
//#include<bits/stdc++.h>
#include<cstdio>
#include<math.h>
#include<iostream>
#include<queue>
#include<algorithm>
#include<string.h>
using namespace std;
typedef long long LL;
const int N=5e4+10;
int n,q;
int a[N];
int f1[N][30];
int f2[N][30];
void ST()
{
for(int i=1;i<=n;i++)
f1[i][0]=f2[i][0]=a[i];
int nlog=(int)(log(double(n))/log(2.0));
for(int j=1;j<=nlog;j++)
{
for(int i=1;i<=n;i++)
{
if(i+(1<<j)-1<=n)
{
f1[i][j]=min(f1[i][j-1],f1[i+(1<<(j-1))][j-1]);
f2[i][j]=max(f2[i][j-1],f2[i+(1<<(j-1))][j-1]);
}
}
}
}
int RMQ(int l,int r)
{
int nlog=(int)(log(double(r-l+1))/log(2.0));
int mi=min(f1[l][nlog],f1[r-(1