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 }