HDU 5443 The Water Problem【RMQ水題】
阿新 • • 發佈:2018-12-23
題意:給出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; }