首页 > 其他分享 >rmq板子

rmq板子

时间:2022-10-30 12:44:06浏览次数:54  
标签:rmq return int mn 板子 lg2 mx

typedef long long LL;
constexpr inline int lg2(LL x) { return sizeof(LL) * 8 - 1 - __builtin_clzll(x); }

template<typename T, size_t N, size_t K>
struct RangeQuery {
T mx[N][K], mn[N][K];
RangeQuery(const vector& a) {
int n = a.size();
for (int i = 0; i < n; ++i) {
mx[i][0] = mn[i][0] = a[i];
}
for (int k = 1; k < K; ++k) {
for (int i = 0; i + (1 << k) <= n; ++i) {
int j = i + (1 << (k - 1));
mx[i][k] = max(mx[i][k - 1], mx[j][k - 1]);
mn[i][k] = min(mn[i][k - 1], mn[j][k - 1]);
}
}
}
T get_min(int x, int y) {
int k = lg2(y - x + 1);
return min(mn[x][k], mn[y - (1 << k) + 1][k]);
}
T get_max(int x, int y) {
if (y < x) return 0;
int k = lg2(y - x + 1);
return max(mx[x][k], mx[y - (1 << k) + 1][k]);
}
};

const int N = 1e5 + 10;
const int K = 20;
using rmq = RangeQuery<int, N, K>;

标签:rmq,return,int,mn,板子,lg2,mx
From: https://www.cnblogs.com/JohnRan/p/16841009.html

相关文章

  • G. Periodic RMQ Problem
    G.PeriodicRMQProblem题目大意给你一个序列\(a\)让你支持\(1\)\(l\)\(r\)\(x\)区间赋值\(2\)\(l\)\(r\)询问区间最小值我们觉得这个问题太水了,所以我们......
  • 树状数组的板子
    该数据结构可以维护序列的前缀和 1.单点修改,求区间和#include<iostream>usingnamespacestd;constintN=5e5+2;intn,tr[N];intlowbit(intx){retu......
  • st表板子
    constintN=1e5+2;intst[N][20],n,a[N];voidinit(){inti,j;for(i=1;i<=n;i++)st[i][0]=a[i];for(j=1;j<20;j++)for(i=1;i+(1<<j)-1<......
  • 线段树的一些板子
    有2种方式,都是用的lazy标记,但具体用法不同 1)标记永久化 假设现在需要1.区间加值2.求区间和  #include<iostream>#include<algorithm>usingnamespacestd......
  • luogu 1908 逆序对板子
     逆序对的本质是二维偏序 给第一维排序(输入时已排好),统计y(k)>=y(i)k<i的个数用树状数组维护y值前缀和,需要的时候直接查询该题需要离散化这个y,再作为树状数组......
  • POJ 3264(STRMQ)
    forj:=1toln(n)/ln(2)  fori:=1ton-(1shlj)+1do    f[i,j]:=min(f[i,j-1],f[i+(1shl(j-1),j-1];f[l,r]:=min(f[l,j],f[r-(1shlj)+1,j];j=ln(r-l+1......
  • c++算法竞赛常用板子集合(持续更新)
    前言本文主要包含算法竞赛一些常用的板子,码风可能不是太好,还请见谅。后续会继续补充没有的板子。当然我太菜了有些可能写不出来T^T稍微有些分类但不多,原谅我QwQ建议Ct......
  • RockerMQ启动Broke报错 /Library/Internet: No such file or directory
    背景相信大家看到这个文章对消息服务器已经不陌生了,笔者也是在平日无聊想着自己编写一套关于RockerMQ的消息灰度框架的时候,准备本地搭建一个RockerMQ服务环境时遇到了一......
  • 一些板子
    #include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>usingnamespacestd;constintN=2e5+10;intn;structGraph{int......
  • RMQ
    时间复杂度处理O(nlogn)查询O(1)#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#defineullunsignedlonglong#defineendl"\n"#definesf......