51Nod 1174 区间中最大的数(RMQ)

Posted jaydenouyang

tags:

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

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstring>
 4 
 5 using namespace std;
 6 const int maxn = 10000 + 5;
 7 int a[maxn];
 8 int f[maxn][15];
 9 
10 void rmq(int cnt){
11     memset(f, 0, sizeof(f));
12     for (int i = 1; i <= cnt; i++){
13         f[i][0] = a[i];
14     }
15 
16     //O(nlogn)
17     for (int j = 1; j < 15; j++){
18         for (int i = 1; i <= cnt; i++){
19             if (i + (1 << j) - 1 <= cnt){
20                 f[i][j] = max(f[i][j - 1], f[i + (1 << (j - 1))][j - 1]);
21             }
22         }
23     }
24 }
25 
26 
27 int Query(int x, int y){
28     int k = 0;
29     while ((1 << (k + 1)) <= y - x + 1)
30         k++;      
31     return max(f[x][k], f[y - (1 << k) + 1][k]);
32 }
33 
34 int main(){
35     ios::sync_with_stdio(false);
36 
37     int n;
38     cin >> n;
39     for (int i = 1; i <= n; i++){
40         cin >> a[i];
41     }
42     rmq(n);
43     int m;
44     cin >> m;
45     while (m--){
46         int x, y;
47         cin >> x >> y;
48         x++, y++;
49         int ans = Query(x, y);
50         cout << ans << endl;
51     }
52 
53     //system("pause");
54     return 0;
55 }

 

以上是关于51Nod 1174 区间中最大的数(RMQ)的主要内容,如果未能解决你的问题,请参考以下文章

51Nod 1174 区间中最大的数

51Nod 1174 区间中最大的数

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

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

51nod 1174 1174 区间中最大的数

51Nod—1174 区间中最大的数 线段树模版