51nod1174(RMQ)

Posted ygeloutingyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51nod1174(RMQ)相关的知识,希望对你有一定的参考价值。

题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1174

 

题意:中文题诶~

 

思路:RMQ模板题

 关于RMQ: http://blog.csdn.net/liang5630/article/details/7917702

 

代码:

 1 #include <bits/stdc++.h>
 2 #define MAXN 10010
 3 using namespace std;
 4 
 5 int dp[MAXN][30], a[MAXN]; //dp[i][j]存储从下标i开始,长度为2^j区间的最大值
 6 
 7 int main(void){
 8     int n;
 9     scanf("%d", &n);
10     for(int i=0; i<n; i++){
11         scanf("%d", &a[i]);
12         dp[i][0]=a[i];    //dp初始化
13     }
14     int len=log2(n);
15     for(int j=1; j<=len; j++){ //长度为2^j的区间最大值可以由相邻的两个长度为2^(j-1)的区间合成
16         for(int i=0; i<n; i++){
17             if(i+(1<<j)<=n){
18                 dp[i][j]=max(dp[i][j-1], dp[i+(1<<(j-1))][j-1]); //从相邻两个区间中选取最大值
19             }
20         }
21     }
22     int m;
23     scanf("%d", &m);
24     while(m--){
25         int s, e;
26         scanf("%d%d", &s, &e);
27         int cnt=log2(e-s+1);
28         cout << max(dp[s][cnt], dp[e-(1<<cnt)+1][cnt]) << endl;
29     }
30     return 0;
31 }

 

以上是关于51nod1174(RMQ)的主要内容,如果未能解决你的问题,请参考以下文章

51NOD1174 区间最大数 && RMQ问题(ST算法)

51nod 1174 区间中最大的数

51Nod 1174 区间中最大的数

51Nod 1174 区间中最大的数

(DP ST表 线段树)51NOD 1174 区间中最大的数

51nod 1174 1174 区间中最大的数