A12 ST表 RMQ问题
视频链接:A12 ST表 RMQ问题_哔哩哔哩_bilibili
// ST表 RMQ O(nlogn) #include<bits/stdc++.h> using namespace std; int n,m; int f[100005][22]; //f[i][k]区间起点为i,长度为2^k的最大值 int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&f[i][0]); for(int k=1;k<=20;k++) //区间长度 for(int i=1;i<=n-(1<<k)+1;i++) //区间起点 f[i][k]=max(f[i][k-1],f[i+(1<<(k-1))][k-1]); for(int i=1,a,b;i<=m;i++){ scanf("%d%d",&a,&b); int k=log2(b-a+1); //区间长度的指数 printf("%d\n",max(f[a][k],f[b-(1<<k)+1][k])); } }
练习:
Luogu P2880 [USACO07JAN] Balanced Lineup G