Balanced Lineup(poj 3264)

RMQ模板题,直接套模板即可


#include<bits/stdc++.h>
using namespace std;
const int MAX=50005;
int maxn[MAX][20],minn[MAX][20],n,q;
void RMQ()
{
    for(int j=1;(1<<j)<=n;j++)
    {
        for(int i=1;i+(1<<j)-1<=n;i++)
        {
            maxn[i][j]=max(maxn[i][j-1],maxn[i+(1<<(j-1))][j-1]);
            minn[i][j]=min(minn[i][j-1],minn[i+(1<<(j-1))][j-1]);
        }
    }
}
int main()
{
    scanf("%d%d",&n,&q);
    int a;
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a);
        maxn[i][0]=minn[i][0]=a;
    }
    RMQ();
    int L,R;
    for(int i=1;i<=q;i++)
    {
        scanf("%d%d",&L,&R);
        int k=0;
        while((1<<(k+1))<R-L+1) k++;//int k=log(double(R-L+1))/log(2.0);
        printf("%d\n",max(maxn[L][k],maxn[R-(1<<k)+1][k])-min(minn[L][k],minn[R-(1<<k)+1][k]));
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41061455/article/details/80282556