#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
const int maxn=5e4+9;
int maxrmq[maxn][20],minrmq[maxn][20],a[maxn];
int n,q;
void getrmq()
{
for(int i=1;i<=n;i++)
minrmq[i][0]=maxrmq[i][0]=a[i];
for(int i=1;(1<<i)<=n;i++)
for(int j=1;j+(1<<i)-1<=n;j++)
{
maxrmq[j][i]=max(maxrmq[j][i-1],maxrmq[j+(1<<i-1)][i-1]);
minrmq[j][i]=min(minrmq[j][i-1],minrmq[j+(1<<i-1)][i-1]);
}
}
int askrmq(int t,int s)
{
int k=log(s-t+1)/log(2);
int mmax=max(maxrmq[t][k],maxrmq[s-(1<<k)+1][k]);
int mmin=min(minrmq[t][k],minrmq[s-(1<<k)+1][k]);
return mmax-mmin;
}
int main()
{
// freopen("in.txt","r",stdin);
while(scanf("%d %d",&n,&q)!=EOF)
{
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
getrmq();
for(int i=1,t,s;i<=q;i++)
{
scanf("%d %d",&t,&s);
printf("%d\n",askrmq(t,s));
}
}
return 0;
}
poj 3264 RMQ
最新推荐文章于 2022-04-29 15:14:22 发布
887

被折叠的 条评论
为什么被折叠?



