倍增 st表 RMQ问题

本章我们来谈谈,倍增 && st表 && RMQ问题。

倍增

        倍增即成倍增长。是指我们在进行递推时,如果状态空间很大,线性递推无法满足时空要求,此时可以考虑成倍增长的方式,只递推状态空间在2的整数次幂位置上的值作为代表,其他值可以通过“任意整数可以表示成若干个 的次幂项的和”这一性质得到。

        其实纯倍增的题

ST表

ST 表(Sparse Table,稀疏表)是用于解决可重复贡献问题的数据结构。

例如:给定个数,n个询问,对于每个询问,求解区间 [l, r] 的极值(如最大值,最小值...)。

但是其实对这种朴实无华的DP,可以用倍增去优化。

就相当于把前一半和后一半取一个最小值,f(i,j)表示第[i,i+2^j-1]之间的最小值,如果理解不了可以想2^0-1 = 0,那么[i,i+0]就是a[i]本身那个数,后面同理....

模板代码

见Acwing:1273. 天才的记忆

#include<bits/stdc++.h>
using namespace std;const int N  = 2*1e5+10,M = 18;int n,m;
int w[N];
int f[N][M]; //运用倍增的思想,f(i,j)表示从i开始到i到i+2^j的区间最大值void init(){for(int j = 0; j < M; j++){for(int i = 1; i+(1 << j)-1 <= n; i++){if(!j) f[i][j] = w[i];//i——i+2^j区间最大值可以转化为i——i+2^(j-1),和i+2^(j-1)——i+2^(j-1)+2^(j-1)中间虽然有重复部分但是取最大值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 = log(len)/log(2);return max(f[l][k],f[r-(1 << k)+1][k]);
}int main(){cin >> n;for(int i = 1; i <= n; i++) cin >> w[i];init();cin >> m;while (m -- ){int l, r;cin >> l >> r;cout << query(l,r) << endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/59075.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

51单片机应用开发(进阶)---定时器应用(电子秒表)

实现目标 1、巩固定时器的配置流程&#xff1b; 2、掌握按键、数码管与定时器配合使用&#xff1b; 3、秒表具体实现&#xff1a;&#xff08;1&#xff09;按K1开始计时&#xff0c;再按K1暂停计时.......&#xff1b;&#xff08;2&#xff09;按K2计时清零&#xff1b;&a…

Kubernetes (K8S)讲解存储/网络/运维

一、K8S 基本概念 1.1 什么是 Kubernetes&#xff08;K8S&#xff09;&#xff1f; Kubernetes&#xff08;通常缩写为 K8S&#xff09;是一个开源的容器编排平台&#xff0c;旨在自动化容器化应用程序的部署、扩展和管理。K8S 提供了高可用性、弹性扩展以及简化的运维操作&a…

mac 安装 nodemon

在 Mac 上安装 nodemon 有两种主要方法 全局安装 1. 前提条件 确保你已经安装了 Node.js 和 npm。你可以在终端中输入 node -v 和 npm -v 来检查是否已经安装以及查看它们的版本号。 2. 使用命令安装 打开终端&#xff0c;输入以下命令来全局安装 nodemon sudo npm insta…

吴恩达深度学习笔记(11)13.

人脸检校&#xff1a;输入某人的照片以及姓名或ID&#xff0c;判断是不是他所说的那个人 人脸识别&#xff1a; 单样本学习&#xff1a; 大多数人脸识别的问题需要在样本中只有一张照片的情况下认出一个人。 相似性函数&#xff1a;利用神经网络训练一个函数&#xff0c;可…

.Net C# 基于EFCore的DBFirst和CodeFirst

DBFirst和CodeFirst 1 概念介绍 1.1 DBFirst&#xff08;数据库优先&#xff09; 含义&#xff1a;这种模式是先创建数据库架构&#xff0c;包括表、视图、存储过程等数据库对象。然后通过实体框架&#xff08;Entity Framework&#xff09;等工具&#xff0c;根据已有的数据…

链表详解(三)

目录 链表功能实现链表的查找SLNode* SLFind(SLNode* phead, SLNDataType x)代码 链表任意位置前插入void SLInsert(SLNode**pphead&#xff0c;SLNode* pos, SLNDataType x)代码 链表任意位置前删除void SLErase(SLNode**pphead&#xff0c;SLNode* pos)代码 链表任意位置后插…

《C#语法一篇通》,20万字,48小时阅读,持续完善中。。。

本文摘录了C#语法的主要内容&#xff0c;接近20万字。 所有鸡汤的味道都等于马尿&#xff01; 如果你相信任何所谓的鸡汤文章&#xff0c;智商堪忧。 计算机语言没有”好不好“之说&#xff0c;骗子才会告诉你哪个语言好&#xff0c;学好任何一本基础语言&#xff08;C&#…

HarmonyOS开发 - 餐饮APP中多门店多窗口打开实例补充

specified启动模式为指定实例模式&#xff0c;有一些特殊场景&#xff0c;例如多门店应用中每次打开一个门店都希望能新建一个门店实例&#xff0c;而重复打开同一个门店都是同一门店实例。 此篇为餐饮APP中多门店实例的补充内容&#xff0c;以解决同一门店多次点击重复创建新窗…

Lammps动态删除反应产物分子的方法

大家好,我是小马老师。 本文介绍lammps反应势模拟过程中动态删除产物分子的方法。 lammps reaxff反应势可以模拟分子间的化学反应,fix reaxff/species命令可以输出反应过程中的产物信息。 在2022之后的lammps版本中,这个命令新增了delete关键词,使用这个命令,可以动态删除…

【Redis问题】(error) NOAUTH Authentication required.解决方法

问题描述&#xff1a; “(error) NOAUTH Authentication required”&#xff0c;通过ping方法和redis打招呼发现不成功&#xff0c;意思是没有这个权限&#xff08;也就是没有密码&#xff09; 问题解决1&#xff1a; 在命令后面加上密码&#xff08;一般情况下&#xff0c;在…

css 在 hover 子元素时,不要让父元素触发 hover 效果

别人写的没看到一个能好用的&#xff0c;虽然功能简单&#xff0c;但是这个应该还是比较陌生的 希望帮到你&#xff0c;能帮我点个赞 废话不多书&#xff0c;直接出代码 <div class"parent"><div class"child">悬停我</div></div&g…

关于自动化测试用例失败重试的一些思考

自动化测试用例失败重跑有助于提高自动化用例的稳定性&#xff0c;那我们来看一下&#xff0c;python和java生态里都有哪些具体做法&#xff1f; 怎么做 如果是在python生态里&#xff0c;用pytest做测试驱动&#xff0c;那么可以通过pytest的插件pytest-rerunfailures来实现…

Vue Router进阶详解

导航守卫 若依框架登录鉴权详解&#xff08;动态路由&#xff09;_若依鉴权-CSDN博客 完整的导航解析流程 导航被触发&#xff1a; 当用户点击页面中的链接、使用编程式导航&#xff08;如router.push或router.replace&#xff09;或手动输入URL时&#xff0c;导航流程被触发。…

如何把子组件的v-model修改数据,进行接收然后定义数据格式,子传父的实现

在 Vue 中&#xff0c;实现子组件通过 v-model 向父组件传递数据并接收后进行格式化&#xff0c;可以按照以下步骤来封装和实现&#xff1a; 步骤 1: 子组件实现 v-model 子组件需要定义一个 props 来接收 v-model 的值&#xff0c;并通过 emit 方法发出更新事件。 <!-- …

Rust 力扣 - 1984. 学生分数的最小差值

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 原数组 nums 排序&#xff0c;遍历nums中下标为[0, nums.len() - k]的学生分数 假设当前遍历的下标为i则&#xff0c;以 i 下标为最小值的学生分数的最小差值为nums[i k - 1] - nums[i] 取最小差值的最小值即…

distrobox install in ubuntu 22.04 / 在 ubuntu 22.04 上安装 distrobox (***) OK

要点&#xff1a; 本测试实验&#xff0c;采用的是 podman distrobox 在沙盒 snap 中&#xff0c;安装 distrobox 需要使用 --devmode 开发模式&#xff1b;可以避开 distrobox 的版本检查&#xff1f; distrobox 官方文档显示&#xff0c; Installation https://distrobox.i…

【k8s】-运维技巧-1

文章目录 k8s-节点驱逐节点驱逐节点删除批量删除镜像k8sdockerdocker 删除缓存k8s异常Pod清理删除所有命名空间下非Running状态的 Pod强制删除所有命名空间下非Running状态的 Podk8s-节点驱逐 节点驱逐 kubectl cordon k8s-node1 kubectl drain k8s-node1 --delete-local-dat…

开源数据库 - mysql - 基于GTID的主备部署

GTID AUTO_POSITION MODE的主从 搭建主从模式 注意&#xff0c;主备库必须开启GTID并设置好server_id&#xff1a; enforce_gtid_consistency ON # 开启强制GTID一致性&#xff0c;防止非GTID事务复制 gtid_mode ON # 开启GTID server_id 9910 # 主主或者主从配置必须不一…

IA应用加速,让电子供应链更智能高效

在当今数字化浪潮中&#xff0c;电子产品制造行业正经历着前所未有的变革。越来越多的企业开展全球化业务&#xff0c;进行数字化转型&#xff0c;对于网络时延的需求也更高。 客户背景 客户专注于为中小微电子产品制造企业提供产品技术方案开发、电子元器件采购、PCBA生产制造…

git 删除远程不存在本地命令却能看到的分支

要删除远程不存在但本地却能看到的分支&#xff0c;你可以按照以下步骤操作&#xff1a; 删除本地分支&#xff1a; 如果你确定要删除的分支已经没有用处&#xff0c;可以使用以下命令来删除本地分支&#xff1a; git branch -d <branch-name>这里的 <branch-name>…