P3865 【模板】ST 表

题目链接:https://www.luogu.com.cn/problem/P3865

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=1e5+10;
 4 int n, m; 
 5 int a[maxn], f[maxn][20];
 6 int lg_2[maxn];
 7 void lg()
 8 {
 9     lg_2[0]=-1;
10     for(int i=1; i<=n; i++)
11         lg_2[i]=lg_2[i/2]+1;    
12 }
13 void st_create()
14 {
15     for(int i=1; i<=n; i++)
16         f[i][0]=a[i];
17     int maxj=lg_2[n];
18     for(int j=1; j<=maxj; j++)
19     {
20         for(int i=1; i<=n-(1<<j)+1; i++)
21             f[i][j]=max(f[i][j-1], f[i+(1<<(j-1))][j-1]);
22     }
23 }
24 int st_query(int l, int r)
25 {
26     int k=lg_2[r-l+1];
27     return max(f[l][k], f[r-(1<<k)+1][k]);
28 }
29 int main()
30 {
31     
32     scanf("%d%d",&n, &m);
33     lg();
34     for(int i=1; i<=n; i++)
35         scanf("%d", &a[i]);
36     st_create();
37     while(m--)
38     {
39         int l, r, ans;
40         scanf("%d%d",&l, &r);
41         ans=st_query(l, r);
42         printf("%d\n", ans);
43     }
44 
45     return 0;
46 }

 

posted @ 2022-04-18 15:44  TFLSNOI  阅读(27)  评论(0编辑  收藏  举报