A12 ST表 RMQ问题

视频链接:35 ST表 RMQ问题_哔哩哔哩_bilibili

Luogu P3865 【模板】ST 表

 

 

 

#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 P1440 求m区间内的最小值

Luogu P1816 忠诚

Luogu P2251 质量检测

Luogu P2880 [USACO07JAN] Balanced Lineup G

 

posted @ 2023-07-05 19:53  董晓  阅读(993)  评论(1编辑  收藏  举报