A12 ST表 RMQ问题
视频链接:35 ST表 RMQ问题_哔哩哔哩_bilibili
#include <iostream> #include <cstring> #include <algorithm> #include <cmath> using namespace std; int f[100005][22]; int main(){ int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&f[i][0]); for(int j=1;j<=20;j++) //枚举区间长度 for(int i=1;i+(1<<j)-1<=n;i++) //枚举起点 f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]); for(int i=1,l,r;i<=m;i++){ scanf("%d%d",&l,&r); int k=log2(r-l+1); //区间长度的指数 printf("%d\n",max(f[l][k],f[r-(1<<k)+1][k])); } }
练习:
Luogu P2880 [USACO07JAN] Balanced Lineup G