首页 > 其他分享 >倍增

倍增

时间:2022-12-10 19:12:24浏览次数:54  
标签:log 每次 乘以 二分法 mathcal 倍增

use C++11

倍增法和二分法可以说是“相反”的算法,效率都很高。二分法是每次缩小一半,从而以 \(\mathcal{O}(\log n)\) 的速度极快地缩小定位到解;倍增法是每次扩大一倍,也是 \(\mathcal{O}(\log n)\) 速度。

倍增就是“成倍增长”,如何实现倍增,是每步乘以 2 吗?有时确实可以,如后缀数组,每次扩展字符长度,就简单地乘以 2。不过,在大多数题目中有更好的实现方法,即利用二进制本身的倍增特性。

一般地,倍增是通过数组来完成的。可以设 \(f_{i,j}\),代表 \(i\) 结点向上跳 \(2^j\) 步所能到达的父节点。首先是预处理:\(f_{i,0}=i\),然后我们知道:\(2^k=2^{k-1}+{(k-1)}\),因此可以得出 \(f_{i,j}=f_{(f_{i-1,j-1}),j-1}\)。

倍增法的局限性是数据要是静态不变的,而不是动态变化的。如果数据发生了变化,那么所有跳板需要重新计算,倍增就失去了意义。

例题

标签:log,每次,乘以,二分法,mathcal,倍增
From: https://www.cnblogs.com/wanguan/p/16948495.html

相关文章

  • P3128 [USACO15DEC]Max Flow P(树上倍增和树链剖分)
    思路1(树上倍增$+$树上差分)每次都修改一条从\(u\)到\(v\),不就是树上差分的专门操作吗??直接用倍增求\(LCA\),每次\(d[u]++,d[v]++,d[LCA(u,v)]--,d[f[LCA(u,v)][0]]--\)。......
  • P1613 跑路 (倍增
      p[i][j][k]表示i,j之间是否存在2^k长度的路径 p[i][j][k]=p[i][mid]&&p[mid][j],初始化p[i][j][0]=0/1 #include<bits/stdc++.h>usingnamespa......
  • [DP 倍增]区间的连续段
    [DP倍增]区间的连续段题目​​题目链接​​思路题意:给你长度为n的数组,由m次查询,每次查询问对于区间[l,r],最少把区间内数切成几段,使得每一段满足和都<=k。个人学习记录使用......
  • [边数限制最短路 倍增floyd 矩阵优化]Cow Relays G
    [边数限制最短路倍增floyd矩阵优化]CowRelaysG题目思路边数限制的最短路?bellman_ford可以拿来解决边数<=k的最短路,但这题是边数恰好为k,可以通过奇妙操作改成恰好经过k......
  • 倍增法求最近公共祖先
    title:倍增法求最近公共祖先date:2022-11-1510:31:45tags:算法本文章遵守知识共享协议CC-BY-NC-SA,转载时需要署名,推荐在我的个人博客阅读。最近公共祖先(Lowest......
  • ST表&倍增&RMQ问题
    ST表,SparseTable,是解决区间最值问题,及RMQ问题的工具,利用倍增思想,O(N*log2(N))预处理,O(1)查询。设f[i][j]表示从i开始的2^j个数的最值,初始化f[i][0]=a[i],对于处理f数组,......
  • 家居3D云展系统加倍增加成交机会-深圳华锐视点
    受疫情持续影响,3D虚拟云展厅加速进入大众的生活。在实体经济下滑的情势之下,3D虚拟云展厅无疑是最好的一种选择。“互联网+”打造,“3D数字化转型”升级成为时下流行的名......
  • 【XSY3326】米缸(时间复杂度均衡,线段树,基环树,倍增)
    时间复杂度的均衡。先考虑暴力的想法:显然这是一棵基环树,那么我们每次修改时暴力\(O(nm)\)重构基环树,然后询问的时候就能\(O(1)\)查询。时间复杂度\(O(nmq)\)。考虑......
  • 【XSY2485】MST(最小生成树+倍增lca+并查集)
    题面Description给定一个\(n\)个点\(m\)条边的连通图,保证没有自环和重边。对于每条边求出,在其他边权值不变的情况下,它能取的最大权值,使得这条边在连通图的所有最小生成......
  • 【XSY2414】【CF587C】Duff in the Army(倍增lca)
    看到题目中\(a<=0\),自然就想到用暴力维护这个东东。设倍增数组\(fa[u][i]\)和\(minn[u][i]\),其中\(minn\)存的是一个结构体,结构体中包含两个东东:一个数组和这个数组中的元......