首页 > 其他分享 >倍增

倍增

时间:2024-08-23 11:54:46浏览次数:8  
标签:cnt 端点 LCA 倍增 节点 dis

RMQ

ST 表

不用讲,浅显易懂,背背板子。

例题

Loj 10121 与众不同

一个需要瞪眼发现单调性的题目。

  • 分析

1.维护 \(last_{val}\) 表示元素 \(val\) 上一次出现的位置

2.维护 \(s_i\) 表示以 \(i\) 为右端点的完美序列的起点,则:

\[s_i = \max \left \{ s_{i - 1}, last_{a_i} + 1 \right \} \]

如果这样去维护 \(s\) 的话就使得 \(s\) 一定是单调不减的。

3.对于询问的 \([l,r]\) 存在一个分界点 \(p\) 使得终点 \(p\) 在 \([p,r]\) 间的完美序列的起点也在 \([l,r]\) 内,终点在 \([l,p - 1]\) 间的完美序列起点在 \(l\) 左边

4.\(p - 1\) 之前的起点都是 \(l\),则完美序列的最大长度为 \((p - 1) - l + 1 = p - l\),若起点在 \([p,r]\) 间则用 st 表维护 \(i - s_i + 1\) 的最大值,则每组询问的答案为:

\[\max \left \{ p - l, \max_{i \in [p,r]} \left \{ i - s_i + 1 \right \} \right \} \]

5.由于 \(s\) 单调不减,所以 \(p\) 可以二分查找得到

6.注意 \(a_i\) 的值域可能为负,\(p\) 可能不存在

时间复杂度 \(O(n \log n + m \log n)\)。

树上倍增

通常维护 \(dp_{i,j}\) 表示节点 \(i\) 沿着祖先跳 \(2^j\) 到达的节点编号、区间最值、区间和等。

LCA

什么啥比倍增,我爱树剖。

平心而论还是倍增好写。

性质

1.LCA 与根是谁有关

2.树上两点距离与根无关

3.设 \(dis_i\) 表示根到 \(i\) 的距离,\(dist(i, j)\) 表示树上节点 \(i,j\) 间的距离,则:

\[dist(x, y) = dis_x + dis_y + 2dis_{LCA(x, y)} \]

容斥原理。

例题

P3398 仓鼠找 sugar

推 LCA 性质。

  • 题意

给定一棵树,\(q\) 次询问,每次询问 \(a\) 到 \(b\) 和 \(c\) 到 \(d\) 的路径是否有交。

  • 分析

用二元组 \((x, y)\) 表示 \(x \to y\) 这条路径

可以大胆猜一个结论:两段路径有且仅有其端点的 LCA 与另一个路径有交。

证明:

若有两个交点,那么原图为一棵基环树,存在环,与原条件矛盾。

P4281 [AHOI2008] 紧急集合 / 聚会

  • 分析

1.三点可以先取两点的 LCA 再与第三点求 LCA

2.可以证明三点至多只会有两个不同的 LCA

3.容斥算得三点间的距离:

\[dis_x + dis_y + dis_z - dis_{LCA_{x, y}} - dis_{LCA_{y, z}} - dis_{LCA_{x, z}} \]

CF379F New Year Tree

  • 分析

1.每次操作只会加同一深度、同一子树内的两个节点,树的直径至多加一且如果直径增加,一定是新加的节点导致的,也就是说新加的节点一定是直径的端点,且两个新加的节点是等价的

2.维护直径的端点,比较 \(dis(cnt,x), dis(cnt,y), dis(x, y)\),其中 \(x, y\) 为直径端点,\(cnt\) 为新加节点

3.倘若用倍增去求 LCA 每次单独更新 \(fa_{cnt,i}\) 即可

时间复杂度是小常数 \(O(q \log q)\)。

标签:cnt,端点,LCA,倍增,节点,dis
From: https://www.cnblogs.com/endswitch/p/18375722

相关文章

  • 1秒构建企业智能门户,销售额倍增,人才触手可及——NIM加持的全新AI虚拟接待!
    随着企业数字化转型的推进,智能化和高效服务成为企业竞争力的关键。我们设计了一款基于NvidiaNIM模型加速平台的智能企业门户接待系统,利用先进的AI技术,只需粘贴您的门户主页(耗时1s)便能自动构建智能虚拟接待员,帮助企业实现更高效的客户支持、产品推荐和人才招聘。这一系统不仅提......
  • 矩阵系统如何助力连锁店效益倍增
    矩阵系统如何助力连锁店效益倍增对于连锁店来说,如何快速扩大品牌影响力并使发布的视频带来更大效益是至关重要的。而我们的矩阵系统可以全面管理和解决这些问题。1、多平台内容同步:连锁店通过矩阵系统实现内容在各大短视频平台的即时同步,确保品牌信息迅速传播至广泛的受......
  • 【倍增】Rigged Games
    题意两队打比赛,大比分2b−1赢,小比分2a−1赢。给定的长度为n的串,两队比赛的每个小分结果是这个串的循环重复。问从该串的每个位置开始,最终谁会赢得整个比赛。思路倍增。首先对于每个位置,计算出它\(2a-1\)局后的比分的比分终点的位置。然后采用倍增,即假设我们要......
  • 【单调栈+倍增】[P7167 [eJOI2020 Day1] Fountain
    【单调栈+倍增】[P7167[eJOI2020Day1]Fountain思路用单调栈处理每个圆盘溢出后流到的第一个位置,然后倍增优化。代码#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);......
  • Luogu P1613 跑路 题解 [ 蓝 ] [ 倍增 ] [ Floyd 最短路 ] [ 状压 dp ]
    跑路:绝佳倍增好题,思路是化\(2^k\)为\(1\),倍增起预处理作用。最近不知道是撞了什么运,前一脚看的是绿题,写完之后交一发,发现直接被lxl升蓝了,血赚。思路:Floyd首先观察到每次走\(2^k\)的代价为\(1\),我们可以预处理出每次走\(2^i\)能到哪些点。但为了让这题的代码更好实......
  • 倍增之ST表
    ST表是什么ST表其实不叫ST表,因为ST中的T已经是table表的意思了ST表适合用来处理RMQ,LCA等经典问题st[i][j]代表区间[i,i+2^j-1]st[i][0]=a[i](初始化)模板题1每天,你们学校有N(1<=N<=50,000)个人按同一序列排队做操.有一天,老师让你找一队连续序列的人来进行比赛......
  • 连接池:Memcached的效率倍增器
    连接池:Memcached的效率倍增器在现代应用架构中,Memcached作为一项关键的缓存技术,其性能直接关系到整个系统的响应速度和扩展能力。Memcached的连接池机制是优化资源使用、提升并发访问效率的重要手段。本文将深入探讨Memcached连接池的工作原理,并展示如何通过代码实现和管理......
  • 【学习笔记】倍增
    【学习笔记】倍增倍增法,顾名思义就是翻倍。它能够使线性的处理转化为对数级的处理,大大地优化时间复杂度。ST表RMQ是RangeMaximum/MinimumQuery的缩写,表示区间最大(最小)值。而ST表是用于解决可重复贡献问题的数据结构。记\(f(l,r)\)为\([l,r]\)这个区间的答案,可重......
  • Day 2 - 分治与倍增
    分治的延伸应用应用场景优化合并假设将两个规模\(\frac{n}{2}\)的信息合并为\(n\)的时间复杂度为\(f(n)\),用主定理分析时间复杂度\(T(n)=2\timesT(\frac{n}{2})+f(n)\)。能直观的看出优化程度还是很大的。归并排序中\(f(n)=O(n)\),则\(T(n)=O(n\logn)\)。......
  • 工作效率倍增:最常用的电脑快捷键大全
    文章目录1.Ctrl+A(全选)2.Ctrl+C(复制)3.Ctrl+X(剪切)4.Ctrl+V(粘贴)5.Ctrl+Z(撤销)6.Ctrl+Y(恢复)7.Ctrl+1,2,3...(切换浏览器标签)8.Ctrl+D(添加收藏)9.Ctrl+E(搜索)10.Ctrl+F(查找)11.Ctrl+H(替换、打开“历史”记录)12.Ctrl+G(定位)13.Ctrl+L(定位到地址栏)14.Ctrl+N(新建空白窗口......