RMQ

来源:互联网 发布:高达00和高达seed知乎 编辑:程序博客网 时间:2024/06/03 13:27
#include <stdio.h>#include <algorithm>#include <cmath>using namespace std;#define maxN 1000010#define maxM 20#define F(i,j,n)for (int i=j; i<=n; i++)int Max[maxN][maxM],Min[maxN][maxM],Log2[maxN];int n,m;int a[maxN];int ask(int l,int r){int k=Log2[r-l+1];return max(Max[l][k],Max[r-(1<<k)+1][k])-   min(Min[l][k],Min[r-(1<<k)+1][k]);}int main(){freopen("RMQ.in","r",stdin);freopen("RMQ.out","w",stdout);while (~scanf("%d%d",&n,&m)){F(i,1,n)scanf("%d",&a[i]);F(i,1,n)Max[i][0]=Min[i][0]=a[i];F(i,2,n)Log2[i]=Log2[i>>1]+1;F(j,1,maxM-2)F(i,1,n-(1<<j)+1){Max[i][j]=max(Max[i][j-1],Max[i+(1<<(j-1))][j-1]);Min[i][j]=min(Min[i][j-1],Min[i+(1<<(j-1))][j-1]);}F(i,1,m){int l,r;scanf("%d%d",&l,&r);printf("%d\n",ask(l,r));}}return 0;}


 
原创粉丝点击