首页 > 其他分享 >RMQ模板

RMQ模板

时间:2023-11-07 17:57:09浏览次数:31  
标签:lg RMQ int 数组 区间 include 模板

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>

using namespace std;

const int N = 200010, M = 18;

int n, m;
int w[N];
int lg[N];
int f[N][M];
//查询区间最值
//预处理f数组
void init()
{
	lg[1]=0;
	for(int i=2;i<=N;i++)lg[i]=lg[i>>1]+1;//预处理对数数组
	//f数组的含义区间以i开头,长度为2的j次方的区间的最大值
    for (int j = 0; j < M; j ++ )
        for (int i = 1; i + (1 << j) - 1 <= n; i ++ )
            if (!j) f[i][j] = w[i];
            else f[i][j] = max(f[i][j - 1], f[i + (1 << j - 1)][j - 1]);
}

int query(int l, int r)
{
    int len = r - l + 1;
    int k =lg[len];
//查询时找到不大于当前区间长度的最大的2次幂,不难想到2的k次方>=区间的长度的一半
    return max(f[l][k], f[r - (1 << k) + 1][k]);
}

int main()
{
    scanf("%d", &n);
    for (int i = 1; i <= n; i ++ ) scanf("%d", &w[i]);

    init();

    scanf("%d", &m);
    while (m -- )
    {
        int l, r;
        scanf("%d%d", &l, &r);
        printf("%d\n", query(l, r));
    }

    return 0;
}

标签:lg,RMQ,int,数组,区间,include,模板
From: https://www.cnblogs.com/mathiter/p/17815534.html

相关文章

  • 自用告警模板
    自用的报警模板{{$var:=.externalURL}}{{range$k,$v:=.alerts}}{{ifeq$v.status"resolved"}}**[Prometheus恢复信息]({{$v.generatorURL}})***[{{$v.labels.alertname}}]({{$var}})*告警级别:{{$v.labels.severity}}告警状态:{{$v.status}}开始时间:{{GetCSTtime$v.s......
  • Tita 升级|「1对1面谈」推荐模板功能上线
    1.1对1面谈推荐模板功能上线,企业模板可直接推荐给员工,快速套用Tita-OKR和新绩效一体化管理平台模板推荐的优先级依次按照个人模板、公司模板、系统模板顺序推荐,其次按模板创建时间排序,最新创建的排序靠前2.考核移动端面谈支持编辑和提交面谈点击‘记录面谈’按钮,即可进入......
  • vscode快捷输入vue2,vue3,模板
    { //Placeyoursnippetsforvuehere.Eachsnippetisdefinedunderasnippetnameandhasaprefix,bodyand //description.Theprefixiswhatisusedtotriggerthesnippetandthebodywillbeexpandedandinserted.Possiblevariablesare: //$1,......
  • 模板整理
    杂项FastIOnamespaceIO{staticintlen=0;staticcharibuf[(1<<21)+5],*iS,*iT,out[(1<<17)+1];#definegc()(iS==iT?iT=(iS=ibuf)+fread(ibuf,1,1<<21,stdin),(iS==iT?EOF:*iS++):*iS++) inlineintread(){ intx=0,f=0;charc=gc()......
  • C++模板显示指定类型时使用引用遇到的问题
    1.问题这里我想让模板函数接收int和char类型的参数,并进行相加,显示指定参数类型为int。第一个调用理论上会自动将char类型强转成int类型,后进行相加;第二个调用理论上会自动将int类型强转成char类型,后进行相加;但是报错Nomatchingfunctionforcallto'add_ab'template<typena......
  • 模板特化遇到的问题--多参数特化
    1.问题我想比较一个int类型和char类型(将char类型-'0')后进行比较,写了如下代码,但是报错 [Error]template-id'Compare_ab<>'for'boolCompare_ab(int&,char&)'doesnotmatchanytemplatedeclaration代码如下template<classT>boolCompare_ab(T......
  • 【躬行】-深度缓冲和模板缓冲是怎么存储的?
    概述最近在工作中需要实现一个功能,用到了模板测试。但奇怪的是,模板测试竟然不起作用!在解决问题的过程中,发现了一些有趣的知识点。通过本文,可以了解在unity中,深度缓冲和模板缓冲到底是怎么存储的。测试环境的搭建Unity版本:2021.3.16f1URP版本:12.1.8RenderDoc:1.29需要注意的是......
  • 计算机配置 — 管理模板 — Windows 组件 — 数据收集和预览版本 对应 注册表 位置
    @echooff::切换对预览体验成员内部版本的用户控制regadd"HKLM\SOFTWARE\Policies\Microsoft\WindowsPreviewBuilds"/vAllowBuildPreview/tREG_DWORD/d1/f::允许商业数据管道regadd"HKLM\SOFTWARE\Policies\Microsoft\Windows\DataCollection"/vCommerc......
  • C++_25_函数模板和类模板 - 重写版
    模板:在C++中允许函数重载,但函数重载每次都必须完全对上参数的顺序,类型和数量。所以C++提供了另一种代码重用机制——“模板”,可以作为同一种类型函数的统一调用接口。模板机制下可划分:1、函数模板      2、类模板模板的语......
  • java 模板
    1.添加依赖:<dependencies><!--支持模板--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId></dependency></dependencies>注:......