首页 > 编程语言 >倍增算法学习指南

倍增算法学习指南

时间:2023-11-04 18:13:37浏览次数:47  
标签:学习指南 查询 int max ST 算法 区间 倍增

前置芝士

倍增思想

ST表

(Sparse Table,稀疏表)是一种简单的数据结构,解决RMQ(区间最大/最小值查询)问题。主要应用倍增思想。O(NlogN)的预处理,O(1)的查询。ST 表是用于解决 可重复贡献问题 的数据结构。

[预处理ST表]

倍增法递推:用两个等长小区间拼凑一个大区间。

f[i][j]表示以第i个数为起点,长度为\(2^j\)的区间中的最大值,先算出并存\(maxi∈[i,i+2^j)\)

img

公式:\(f[i][j]=max(f[i][j-1],f[i+2^{j-1}][j-1])\)

int f[MAXN][21];//第二维的大小根据数据范围决定,不小于log(MAXN)
for(int i=1;i<=n;i++) cin>>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])

[区间查询最值]

对查询区间\([l,r]\)做分割,并拼凑区间长度指数\(k=log_2(r-l+1)\)

img

img

公式:\(max([l,r])=max(f[l][k],f[r-2^k+1][k])\)

for(int i=2;i<=n;i++) log2[i]=log2[i/2]+1;//预处理log2
int k=log2[r-l+1];
int res=max(f[l][k],f[r-(1<<k)+1][k]);

可重复贡献问题?????

标签:学习指南,查询,int,max,ST,算法,区间,倍增
From: https://www.cnblogs.com/taotao123456/p/17809613.html

相关文章

  • 对于扩展欧几里得算法的小总结
    对于不定方程\(ax+by=c\)有正数解的充分必要条件是\(c|gcd(a,b)\),证明请看裴蜀定理那么显然的,我们只要能解出方程\(ax+by=gcd(a,b)\)然后把解\(\times\frac{c}{gcd(a,b)}\)即可如何解这个新的方程呢?我们知道\(gcd(a,b)\),并且它等于\(gcd(b,a%b)\),也就是说,方程\(bx+(a%b)y=gcd......
  • 求两个数的最大公约数的欧几里得算法
    上网查找什么是求两个数的最大公约数的欧几里得算法(辗转相除法),提交算法说明和网上链接。算法说明:1.两个正整数中,用大数除以小数求余2.再用其中的大数除以其中的小数求余,重复步骤直至余数为03.当余数为0时,取当前算式除数为最大公约数链接:欧几里得算法(辗转相除法)求最大公约......
  • 【进阶算法】一维数组的前缀和
    前缀和是指数组某个索引之前的所有元素的和,是一种重要的预处理手段,使用前缀和可以快速求出数组某一个区间的和。 示例:数组arr=[8,1,3,-2,5,0,-3,6],输入m个询问,每个询问输入一对l,r。对于每个询问,要求输出原数组中从第l个数到第r个数的和。比如,第1次询问,输入[0,2],需要输出1......
  • 扩展欧几里得算法模板
    扩展欧几里得算法问题:给定两个非零整数$a$和$b$,求一组整数解$(x,y)$,使得$ax+by=gcd(a,b)$成立($gcd(a,b)$是a、b的最大公约数)。设$$\begin{aligned}ax_1+by_1&=gcd(a,b)\bx_2+(a%b)y_2&=gcd(b,a%b)\end{aligned}$$化简,得递推公式:$$\begin{aligned}&x_1=y_2\&y......
  • 音乐推荐与管理系统Python+Django网页界面+协同过滤推荐算法
    一、介绍音乐推荐与管理系统。本系统采用Python作为主要开发语言,前端使用HTML、CSS、BootStrap等技术搭建界面平台,后端使用Django框架处理请求,并基于Ajax等技术实现前端与后端的数据通信。在音乐个性推荐功能模块中采用通过Python编写协同过滤推荐算法模块,实现对当前登录用户的个性......
  • 快速排序算法原理与python实现
    快速排序是一种不稳定的排序算法,时间复杂度O(nlogn),最差情况下时间复杂度为O(n^2)。原理是:选定待排序数组的任意元素为基准轴:pivot,通常选择数组第一个元素,保存下pivot数值。遍历数组中的其他元素,通过交换元素位置,数组被划分为两个子序列:左子序列元素值全小于等于pivot,右子序列......
  • 音乐推荐与管理系统Python+Django网页界面+协同过滤推荐算法
    一、介绍音乐推荐与管理系统。本系统采用Python作为主要开发语言,前端使用HTML、CSS、BootStrap等技术搭建界面平台,后端使用Django框架处理请求,并基于Ajax等技术实现前端与后端的数据通信。在音乐个性推荐功能模块中采用通过Python编写协同过滤推荐算法模块,实现对当前登录用户的个......
  • 字符串匹配算法:KMP
    Knuth–Morris–Pratt(KMP)是由三位数学家克努斯、莫里斯、普拉特同时发现,所有人们用三个人的名字来称呼这种算法,KMP是一种改进的字符串匹配算法,它的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。它的时间复杂度是O(m+n)字符匹配:给你两个字符......
  • 【教3妹学编程-算法题】117. 填充每个节点的下一个右侧节点指针 II
    2哥 :3妹,听说你昨天去面试了,怎么样啊?3妹:嗨,别提了,让我回去等通知,估计是没有通知了,还浪费我请了一天假。2哥 :你又请假了啊,你是怎么跟你那个严厉的老板请假的。3妹:我说我2哥生病了,嘿嘿~2哥:一猜就是说我生病了,自从你找工作,我这一年都病了十几回了……3妹:没办法,假不好请嘛,我尽快......
  • 教3妹学编程-算法题】2914. 使二进制字符串变美丽的最少修改次数
    3妹:呜呜,烦死了,脸上长了一个痘2哥 :不要在意这些细节嘛,不用管它,过两天自然不就好了。3妹:切,你不懂,影响这两天的心情哇。2哥 :我看你是不急着找工作了啊,工作那么辛苦,哪还有时间想这些啊。3妹:说到找工作,我又要去刷题了。2哥:我给你出一道关于美丽的题吧,让你的心情美丽美丽~ 1题目......