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

[模板]ST表

时间:2018-02-18 10:30:16      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:using   view   分享   code   tchar   gpo   read   gif   ios   

https://www.luogu.org/problemnew/show/P3865
//注意预处理
技术分享图片
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <algorithm>
 4 #include <cmath>
 5 #include <cctype>
 6 #include <cstring>
 7 using namespace std;
 8 
 9 int n[100005], st[100005][21];
10 inline int read() {
11     register int n, ch, f = 1;
12     n = 0, ch = getchar();
13     while (!isdigit(ch)) {if (ch == -) f = -1; ch = getchar();}
14     while (isdigit(ch)) n = (n << 3) + (n << 1) + ch - 0, ch = getchar();
15     return n*f;
16 }
17 int logg[100005], gg[21];
18 inline int RMQ(int l, int r){
19     int k = logg[r-l+1];//log2(r-l+1);
20     return max(st[l][k], st[r-gg[k]+ 1][k]);
21 }
22 
23 int main(void){
24     int m = read(), Q = read(), t = 0;
25     for(int i = 1; i <= m; ++i){//预处理log2(m); 
26         if (i >= (1 << (t+1)))t++;
27         logg[i] = t;
28         }
29         for(int i = 0; i <= 20; ++i) gg[i] = (1 << i);
30     for(int i = 1; i <= m; ++i) n[i] = read(), st[i][0] = n[i];
31     int k = logg[m];//log2(m);
32     for(int j = 1; j <= k; ++j)
33         for(int i = 1; i + gg[j] - 1 <= m; ++i){
34             st[i][j] = max(st[i][j-1], st[i + gg[j-1]][j-1]);
35         }
36     while(Q--){
37         int l = read(), r = read();
38         printf("%d\n", RMQ(l, r));
39     }
40     return 0;
41 }
View Code

 

[模板]ST表

标签:using   view   分享   code   tchar   gpo   read   gif   ios   

原文地址:https://www.cnblogs.com/Ycrpro/p/8452480.html

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