您的位置:首页 > 其它

hdu 5443 water problem (RMQ)

2015-09-14 18:26 260 查看
裸的RMQ问题。

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define maxn 1000001
int f[20][maxn];
void init(int n)
{
    int i,j,k;
    for(j=1;(1<<j)<=n;++j)
    {
        k=1<<(j-1);
        for(i=0;i+k<n;++i) f[j][i]=max(f[j-1][i],f[j-1][i+k]);
    }
}

int rmq(int a,int b)
{
    int dis=b-a+1,k;
    for(k=0;(1<<k)<=dis;++k);
    --k;
    return max(f[k][a],f[k][b-(1<<k)+1]);
}
int main()
{
    int T,n;
    cin>>T;
    while(T--)
    {
        scanf("%d",&n);
        for(int i=0;i<n;++i) scanf("%d",&f[0][i]);
        init(n);
        int l,r,q;
        scanf("%d",&q);
        while(q--)
        {
            scanf("%d%d",&l,&r);
            printf("%d\n",rmq(l-1,r-1));
        }
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: