您的位置:首页 > 其它

HDU 5443 The Water Problem【RMQ水题】

2016-12-11 00:06 323 查看
The Water Problem

题意:给出N个数和Q次查询,没次查询L,R,输出【L,R】内数组元素的最大值;

AC代码:

#include<cstdio>
#include<algorithm>

using namespace std;

const int MAXN=1e3+11;
int a[MAXN],d[MAXN][32];

void RMQ_init(int N) {
for(int i=0;i<N;++i) d[i][0]=a[i];
for(int j=1;(1<<j)<=N;++j) for(int i=0;i+(1<<j)-1<N;++i) {
d[i][j]=max(d[i][j-1],d[i+(1<<(j-1))][j-1]);
}
}
int RMQ(int L,int R) {
int k=0;
while((1<<k+1)<=R-L+1) ++k;
return max(d[L][k],d[R-(1<<k)+1][k]);
}

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