首页 > 编程语言 >算法学习笔记(42): 颜色段均摊

算法学习笔记(42): 颜色段均摊

时间:2023-11-23 22:12:27浏览次数:39  
标签:log 线段 42 算法 复杂度 权值 区间 均摊

颜色段均摊

反正 ODT

对于 ODT 来说,其区间推平的复杂度是 \(O((n + m) \log n)\) 的,十分的优秀,但是对于查询来说,我们需要通过分块或者线段进行辅助,从而达到正确的复杂度。

有一种特殊情况例外:
如果推平和查询同时发生,意味着推平时对于每一段查询的复杂度是没有问题的!

判断是否可以均摊,我们可以看是否能够构造出一个操作序列使得序列复原,如果可以复原,那么基本是不可以均摊的。

或者我们看是否能找到一个量,不增,或者不减,或者有一个神秘的上界,再抽象一点说,存在某一个势能在我们可接受复杂度内。


CF444C - DZY Loves Colors

  • 区间赋值
  • 区间权值求和

对于区间赋值来说,ODT 所谓的颜色段均摊可以很好做到 \(O((n + m) \log n)\) 的复杂度。

但是我们唯一担心的是查询权值的复杂度,这是很难接受的!

所以我们需要通过线段树进行辅助:考虑到区间赋值对权值带来的影响是区间加,所以利用线段树维护即可。

乍一眼看上去是 \(O(n \log n + m \log^2 n)\) 的复杂度(加上了修改时线段树的复杂度),但是考虑到实际上,每新增或者减少一个颜色段,只会在线段树上区间加一次,也就是说 \(O(n + m)\) 个颜色段带来的是 \(O((n + m) \log n)\) 的线段树操作,所以仍然是一个 \(\log n\) 的。

提交记录:https://codeforces.com/problemset/submission/444/233908238


CF453E - Little Pony and Lord Tirek

这下操作可能困难了。

这道题其实就是所谓的特殊情况:

如果推平和查询同时发生,意味着推平时对于每一段查询的复杂度是没有问题的!

也就是说,我们在区间推平的时候顺便维护一下这一段的答案即可。

现在的问题转化为经过 \(t\) 时刻后,\([l, r]\) 的权值和。

如果没有对于 \(m_i\) 取 \(\min\) 是简单的,我们需要想办法绕开它。

考虑权值关于时间的函数实际上是分段的:

\[f_i(t) = \begin{cases} 0, & r_i = 0 \\ r_i \times t, & t \le \lfloor \frac {m_i}{r_i} \rfloor \\ m_i, & otherwise \end{cases} \]

考虑到 \(\frac {m_i} {r_i} \le 10^5\),所以可以据此建立可持久化线段树,查询区间即可。

注意由于我们维护的是一次函数,所以需要 \(K, B\) 两棵线段树。

提交记录:https://codeforces.com/contest/453/submission/233920307


P5066 [Ynoi2014] 人人本着正义之名

很套路的是将连续的 \(01\) 段缩成一段,但是呢?

考虑到每次操作,可能造成如下的影响:

  • 一些 \(0\) 段长度 \(\pm 1\)
  • 一些 \(1\) 段长度 \(\pm 1\)

考虑到区间长度在变化,我们可以通过平衡树维护,例如 wblt

但是我们会发现存在一个段长度变为 \(0\) 的情况,此时这个区间应当被删除,不再使用。

所以我们需要快速的找到是否需要删除某个区间,这容易利用在平衡树上维护两者的最短长度实现。如果发现了变为 \(0\) 的段,在线段树上二分下去删除它即可。

考虑这样的段一共有 \(O(n)\) 段,每次删除代价是 \(O(\log n)\) 的,总复杂度是 \(O(n \log n)\),可以接受。

每次操作也是 \(O(\log n)\) 的,总复杂度便是 \(O(n \log n + m \log n)\),十分优秀。

标签:log,线段,42,算法,复杂度,权值,区间,均摊
From: https://www.cnblogs.com/jeefy/p/17852546.html

相关文章

  • 2023-2024-1 20232421邓锴 《网络空间安全导论》 第2周学习总结
    教材学习总结了解密码的来源与发展ENIGMA机的构造以及机理信息论的基本观点了解现代密码学发展以及面临的挑战密码学理论基础(数学知识)密码学的新进展以及未来方向思维导图教材学习中的问题和解决问题问题1:ENIGMA机的构造以及机理了解不清问题1解决办法:查询图片→查找......
  • 算法~让整数从指定范围开始
    题目有个需求,我有4种类型,每种类型又有自己的数列,问我如何用一个数字来表示它们思路可以看一下java里的线程的实现,它是将一个int64的数字进行分区,每个区间代表一种状态,如运行中,挂起,暂停等,我们也可以通过这个方法来实现。实现在int32中,我找一个范围,存储我的运行中状态的数列,为......
  • 文心一言 VS 讯飞星火 VS chatgpt (141)-- 算法导论12.1 1题
    一、用go语言,对于关键字集合(1,4,5,10,16,17,21),分别画出高度为2、3、4、5和6的二又搜索树。文心一言:以下是用Go语言为给定的关键字集合(1,4,5,10,16,17,21)生成的高度为2、3、4、5和6的二叉搜索树。由于二叉搜索树的形状对于不同的生成方式可能会有所不同,所以我这里给出的是一种......
  • BIT大数据应用算法2022年期末考试A卷解析
    北京理工大学2022年大数据应用算法期末考试A卷一、请简要回答为什么需要设计可合并的\(Sketch\)算法?可合并的\(Sketch\)算法主要是用于什么场景?解答:我谔谔二、给定数据流\(D=(1,2,5,1,4,2,3,3,2,4,5,2)\),假设\(k=3\),请详细描述\(Misra‐Gries\)算法在该数据流上的运......
  • 文心一言 VS 讯飞星火 VS chatgpt (141)-- 算法导论12.1 1题
    一、用go语言,对于关键字集合(1,4,5,10,16,17,21),分别画出高度为2、3、4、5和6的二又搜索树。文心一言:以下是用Go语言为给定的关键字集合(1,4,5,10,16,17,21)生成的高度为2、3、4、5和6的二叉搜索树。由于二叉搜索树的形状对于不同的生成方式可能会有所不同,所以我这里给出的是......
  • 羚通视频智能分析平台抽烟打电话识别系统 抽烟、打电话算法检测
    羚通视频智能分析平台抽烟打电话识别系统是一种先进的技术,旨在通过算法检测来识别和监控人们在特定场所是否抽烟或打电话。该系统利用先进的计算机视觉和深度学习算法,对视频流进行实时分析和处理,以准确识别出抽烟和打电话的行为。首先,该系统通过摄像头或其他视频设备......
  • 羚通视频智能分析平台抽烟打电话识别系统 抽烟、打电话算法检测
    羚通视频智能分析平台抽烟打电话识别系统是一种先进的技术,旨在通过算法检测来识别和监控人们在特定场所是否抽烟或打电话。该系统利用先进的计算机视觉和深度学习算法,对视频流进行实时分析和处理,以准确识别出抽烟和打电话的行为。首先,该系统通过摄像头或其他视频设备获取实时的视频......
  • abc290g O(TD)算法
    前言似乎洛谷上的题解和AT官方都给的\(O(TD^2)\)算法?这里给出乱搞搞出的一种\(O(TD)\)算法。题解首先发现\(D\)虽然没给出固定上界,但显然不超过\(log_210^{18}=60\)。再接下来可以发现删边等价于先选一颗子树,再删掉这颗子树内部的子树。先纸上瞎画两下,发现子树内部......
  • 2023-2024-1学期20232423《网络空间安全导论》第三周学习总结
    防火墙的那个部分最容易被攻陷,加固方法有哪些教材学习——网络安全基础3.1网络安全概述3.2网络安全防护技术对于计算机来说,可攻破的入口有很多,所以需要我们不断地提升技术、寻找防护方法,并不断加固我们的防御。3.3网络安全工程与管理3.4新型网络及安全技术对于新生......
  • 算法概念
    算法的定义:解决问题的过程中用到的所有方法和步骤。算法的描述方法:自然语言、流程图、计算机语言。算法的三大结构:顺序结构、选择结构、循环结构。算法的特点:1、有穷性。(算法的操作步骤应是有限的。生活算法与程序算法都是有穷的,没有永远完不成任务的生活算法。)......