ST表
const int N(10010);
int dp[N][20];
void RMQ(int n)
{
for(int i=1;i<=n;i++)
{
scanf("%d",&dp[i][0]);
}
for(int j=1;j<20;j++)
{
for(int i=1;i<=n;i++)
{
if(i+(1<<j)-1<=n)
{
dp[i][j]=min(dp[i][j-1],dp[i+(1<<j-1)][j-1]);
}
}
}
}
int Query()
{
int l,r;
scanf("%d%d",&l,&r);
int k=log(r-l+1.0)/log(2.0);
return min(dp[l][k],dp[r-(1<<k)+1][k]);
}
线段树