lxl 学长讲课笔记

常数种可能性的状态

通过预先处理多种状态的信息,从而快速的转换状态。

经典操作:flip

分析信息的思路

  • 利用线段树

利用线段树的时候,如何合并两个分支区间的信息,我们需要有如下注意:

  1. 答案 - 依赖的信息,继续的依赖,这样就能找到需要维护的东西。这终会产生闭包。

  2. 合并时,我们只需要考虑跨过分治区间对于答案的贡献,对于不同的情况进行讨论即可。

线段树其实就是十分自然的序列上的分治树,所以我们处理线段树的过程也可以看作分治的过程。

只是在这里,两个分治区间的信息可以快速地合并罢了。

  • 对于不独立信息的处理

独立的信息指区间 \(\max\) 区间和问题。

不独立的如配对相关问题,经典的有前驱后继,或者 \(a_i + a_j = w\) 的问题。

一种做法是离线进行扫描线,但是不能带修,一种是强行进行高位扫描线,也就是莫队,可以带修,但是复杂度可能无法接受。

然而更好的做法我们需要尝试将不独立的信息变的独立

  1. 配对问题中合理的利用 pre 会有奇效!

  2. 配对问题可能出现 \(O(n)\) 影响 pre 的情况,我们需要合理利用 支配 的性质来减少不必要的影响。

例如 P6617 查找 Search 中有很好的体现。

  • 在什么地方使用数据结构?

一般来说,我们有两种方案:

  1. 对于信息建立数据结构,在询问时对其进行查询。
  2. 对于询问建立数据结构,利用信息更新最终答案。

CF702F T-Shirts 中有很好的体现,这两种思路都可以。

小技巧

颜色段均摊

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

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

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

或者我们看是否能找到一个量,不增,或者不减,或者有一个神秘的上界。

更详细的文章:# 算法学习笔记(42): 颜色段均摊

容均摊

对于 \(\sqrt x\) 的操作,可能可以通过 \(\max - \min\) 的势能来搞定。

如果发现极差会变化:\(\max - \min \ne \sqrt{\max} - \sqrt {\min}\),那么便可以暴力递归下去修改,否则可以整体打一个 \(\sqrt x\) 的标记。对于区间加减,在线段树上至多影响 \(O(\log n)\) 个节点的势能,所以复杂度并不会有问题。

类似的操作有 \(\lfloor \frac x d \rfloor\),这可以将除法操作变为对于区间的加减操作。

事实上吉司机线段树对于区间取 \(\min / \max\) 的操作也是利用了容均摊,将对于最值的操作分成两套标记:最值与非最值,从而达到合理的复杂度。

自由度与扫描线

自由度指的是询问中变量的数量,例如一位区间的自由度为 \(2\)。

如果将动态问题转化为静态问题,自由度 \(+1\),也就是增加了 时间 这一维度,这也常常是扫描线的做法。

很多时候,我们可以将询问与信息的影响放在一个二维平面上进行理解,从而得到扫描线的做法。

更详细的文章:

换维扫描线

其处理的修改与询问大概类如:

通过换维扫描线使得:

  • 区间加 \(\to\) 单点加
  • 单点查 \(\to\) 区间查

通俗一点来说,就是对于修改建立数据结构!

区间子区间问题

形式就是多次询问给定区间 \((l, r)\),求形如 \(\sum_{i = l}^r \sum_{j = i}^r f(i, j)\) 的式子。

一般来说,我们可以从如下几个步骤入手:

  1. 考虑只是一个区间怎么做,是否有很好的性质或者充要条件?
  2. 考虑只有一次询问怎么做,是否可以进行扫描线,或者进行分治?
    • 如果可以扫描线,那么这个问题是否可以通过历史版本和搞定?
    • 如果可以分治,是否可以利用询问挂在区间上搞定?
  3. 考虑每个点对于那些区间有贡献,放在二维平面上理解,利用甚至 \(O(n \log^2 n)\) 的树套树?
  4. 考虑 \(O(n)\) 计算的经典优化方法?
  5. 考虑这是不是一个 \(\mathrm{fAkE}\) 的式子,可以利用类似 \(O(\frac {n^2}{w})\) 的东西碾过去?
  6. 下一道题?(雾

基于区间逆序对的思考

区间相关的信息,维度与自由度,莫队

双前缀莫队:\(f(l, r, x, y) \to f(1, r, x, y) - f(1, l - 1, x, y) \to f(1, r, 1, y) - f(1, r, 1, x - 1) - f(1, l - 1, 1, y) + f(1, l - 1, 1, x - 1)\)。将 \(4\) 自由度转化为 \(2\) 自由度的问题,利用莫队。

莫队和可撤销莫队至多差一个 \(O(\log n)\) 的复杂度

lxl学长讲课笔记的更多相关文章

  1. 【分享】学长的安利来了~~O(∩_∩)O

    前言:应栋哥要求,学长把演讲稿稍微整理下发布出来,这可以算是一篇安利文,也可以说是一篇经历文吧.作为一个确确实实从软工里收获到挺多东西的过来人,学长希望可以通过学长的经历来让你们对软工更加期待. 安利 ...

  2. 黄学长模拟day1 某种密码

    关于某种密码有如下描述:某种密码的原文A是由N个数字组成,而密文B是一个长度为N的01数串,原文和密文的关联在于一个钥匙码KEY.若KEY=∑▒[Ai*Bi],则密文就是原文的一组合法密码. 现在有原 ...

  3. Week1 学长的经验教训

    我手头拿到的是上一届学长的软件工程大作业,作业的名称是——汽车4S店信息管理系统. 这个大作业我认为还是非常典型的传统模式的大作业,由手机端(客户端)和服务端组成,非常的传统.             ...

  4. 对学长所谓“改变世界的游戏”《shield star》的运行感想-毛宇部分(完整版本请参考团队博客)

    对于学长项目<shield star>的思考和看法: Ryan Mao ((毛宇)  110616-11061171 试用了一下学长黄杨等人开发的<shield star>游戏 ...

  5. 学长们的求职血泪史(C/C++/JAVA)

    以下分三个方向讲解,每个方向都是一个学长独自撰稿. (一)  C语言篇 C语言求职血泪史 华为(实习):机试.一面.性格测试被鄙视.优招被鄙视.普招被鄙视 锐捷:笔试.面试莫名其妙被鄙视 创新工场:笔 ...

  6. Team Homework #1 学长“学霸英语学习软件”试用

    简介: 一款英语单词记忆和管理辅助软件. 基本功能: 内置GRE词汇及其常考形态.Webster英语解释 单词发音功能 单词测验模式 简易词典功能 基本界面 词库单词读取 单词测试 优点: 1.界面简 ...

  7. 王学长的LCT标程

    善良的王学长竟然亲自打了一遍QAQ好感动QAQ #include<iostream> #include<cstdio> #include<cmath> #inclu ...

  8. 一位学长的ACM总结(感触颇深)

    发信人: fennec (fennec), 信区: Algorithm 标 题: acm 总结 by fennec 发信站: 吉林大学牡丹园站 (Wed Dec 8 16:27:55 2004) AC ...

  9. 王学长的AAA树

    让我们响应王学长的号召勇敢的分开写splay和lct吧! 分开写大法好!!!!!!!!!!!杜教的ch[4]弱爆了!!!! #include <stdio.h> #include < ...

  10. 个人技术博客--团队Git规范(参考西瓜学长)

    援引西瓜学长:GitHub团队项目合作流程 废话少说直接写 1.fork 1.对于组员来说第一步就是fork 2.点击fork之后 上面是我们的团队仓库 切换回自己的仓库 就会看到 是fork于团队仓 ...

随机推荐

  1. redis+lua脚本实现接口限流

    写在前面 在多线程的情况下对一个接口进行访问,如果访问次数过大,且没有缓存存在的情况下大量的请求打到数据库可能会存在数据库宕机,从而造成服务的不可用性.往往我们需要对其进行限流操作用来保证服务的高可用 ...

  2. whistle代理使用

    1. 介绍 whistle(读音[ˈwɪsəl],拼音[wēisǒu])基于Node实现的跨平台web调试代理工具,类似的工具有Windows平台上的Fiddler,主要用于查看.修改HTTP.HTT ...

  3. Serverless JOB | 传统任务新变革

    简介: SAE Job 重点解决了用户的效率和成本问题,在兼具传统任务使用体验和功能的同时按需使用,按量计费,做到低门槛任务上云,节省闲置资源成本. Job 作为一种运完即停的负载类型,在企业级开发中 ...

  4. PolarDB-X迎来开源后首个重大版本升级,2.1版本新增5大特色功能

    ​简介:2022 年 5 月25日,阿里云开源 PolarDB-X 升级发布新版本!PolarDB-X 从 2009 年开始服务于阿里巴巴电商核心系统, 2015 年开始对外提供商业化服务,并于 20 ...

  5. 摆脱 AI 生产“小作坊”:如何基于 Kubernetes 构建云原生 AI 平台

    ​简介:本文将介绍和梳理我们对云原生 AI 这个新领域的思考和定位,介绍云原生 AI 套件产品的核心场景.架构和主要能力. ​ 作者:张凯 前言 云原生(Cloud Native)[1]是云计算领域过 ...

  6. 最佳实践丨云上虚拟IDC(私有池)如何为客户业务的确定性、连续性保驾护航

    ​简介: 企业业务上云后,还面临特定可用区购买云上特定计算产品实例失败的困境?云上私有池pick一下 Why 云上业务为什么需要资源确定性.服务连续性 云计算正朝着像水电煤一样的基础设施演进,支持用户 ...

  7. [Go] 结构体成员的第三个位置上标签的作用

    结构体成员加了第三个位置的标签,在转换指定类型时,key 会使用指定的名字. package main import ( "encoding/json" "log&quo ...

  8. dotnet 使用 IndentedTextWriter 辅助生成代码时生成带缩进的内容

    随着源代码生成的越来越多的应用,自然也遇到了越来越多开发上的坑,例如源代码的缩进是一个绕不过去的问题.如果源代码生成是人类可见的代码,我期望生成的代码最好是比较符合人类编写代码的规范.为了能让人类在阅 ...

  9. vue子组件给父组件传值

    子组件: <template> <div class="app"> <input @click="sendMsg" type=&q ...

  10. 简述 js 的代码整洁之道

    文章参考出自:https://juejin.cn/post/7224382896626778172 前言 为什么代码要整洁? 代码质量与整洁度成正比.有的团队在赶工期的时候,不注重代码的整洁,代码写的 ...