A12 ST表 RMQ问题

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

 

 

Luogu P3865 【模板】ST 表

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

Luogu P1816 忠诚

Luogu P2251 质量检测

Luogu P2880 [USACO07JAN] Balanced Lineup G

 

posted @ 2023-07-05 19:53  董晓  阅读(1722)  评论(2)    收藏  举报