码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-03-28 23:56:54      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:names   blog   als   stream   log   using   clu   rmq   turn   

 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)

标签:names   blog   als   stream   log   using   clu   rmq   turn   

原文地址:https://www.cnblogs.com/jaydenouyang/p/8666599.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!