洛谷 P3865 【模板】ST表

题目链接:

https://www.luogu.org/problemnew/show/P3865

 

st表:

倍增的思想

ST[i][j]维护i到i+2^j-1区间内的答案。

代码:

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cmath>
 4 
 5 using namespace std;
 6 
 7 int n,m,dp[1000004][30],l,r;
 8 
 9 void dpbegin() {
10     for(int j = 1;j <= 21; j++)
11         for(int i = 1;i + (1 << j) - 1 <= n; i++)
12             dp[i][j] = max(dp[i][j-1],dp[i+(1<<(j-1))][j-1]);
13 }
14 
15 int main()
16 {
17     scanf("%d%d",&n,&m);
18     for(int i = 1;i <= n; i++)
19         scanf("%d",&dp[i][0]);
20     dpbegin();
21     for(int i = 1;i <= m; i++) {
22         scanf("%d%d",&l,&r);
23         int k = log2(r-l+1);
24         printf("%d\n",max(dp[l][k],dp[r-(1<<k)+1][k]));
25     }
26     return 0;
27 }

 

posted @ 2019-03-15 20:59  Mr^Simon  阅读(158)  评论(1编辑  收藏  举报