Ynoi做题笔记
搬运自洛谷博客,原发表时间:2022-07-20
大致按照我感觉的难度排序。做了十四五道的样子,可以慢慢胡了。
评分标准:
技术力+思维力+代码力+卡常力
水平不够,评分暂时撤掉。
P3934 [Ynoi2016] 炸脖龙 I
题意:区间加,区间幂塔。
先考虑如何维护区间加+单点查询。很显然地,使用树状数组维护差分数组,前缀和即为该点的值。时间复杂度为
使用扩展欧拉定理处理幂塔。设模数为
由于需要计算
总时间复杂度为
技术力比较高一些,感觉实际难度并不大。
P5309 [Ynoi2011] 初始化
题意:将所有编号形如
根号分治,设临界值为
对于
而若
取
总时间复杂度为
个人认为略微卡常,临界值
P5524 [Ynoi2012] NOIP2015 充满了希望
题意:操作:交换两点点权,区间赋值,单点查;查询:一段操作区间得到的结果之和。
维护每个位置最后一次修改的时间戳,单点查询记录当前的值,使用线段树维护;查询按右端点排序,单点查时在时间戳上加上其结果,答案即为区间和,使用树状数组维护。
时间复杂度
P8511 [Ynoi Easy Round 2021] TEST_68
题意:一棵树,对于每个节点求其子树以外的任何两节点的最大异或和。
首先考虑整棵树,求出其最大异或和
显然非
考虑
总时间复杂度
P5527 [Ynoi2012] NOIP2016 人生巅峰
题意:区间修改为原数的三次方,区间查询是否存在某两个子序列的和相等。
注意到可能的子序列的数量为 Yuno
。
时间复杂度
P4689 [Ynoi2016] 这是我自己的发明
题意:一棵树,支持换根,求树上两点的子树内相同数的个数。
- 前置问题:link
有
设
则问询可转化为
拆成如上4个操作后,莫队计算即可,时间复杂度
- 回到原题
不考虑换根操作,将节点投射到 dfs 序上,则子树为一段连续区间,即与P5268类似。
考虑静态处理换根:若当前根在
(此处拆为2个区间,再与
理性看待此题卡常:莫队操作数最大可达到
取块长
P5607 [Ynoi2013] 无力回天 NOI2017
题意:区间异或上
区间操作,与炸脖龙一样的思路想到差分,转化为单点修改。维护树状数组的时间复杂度为
设差分数组
有一个性质(这一步非常妙,查看了题解才想出来):
感性证明:因为
于是就不难想到使用线段树维护
总时间复杂度
好像不怎么卡常。难点在于将原数组查询转换为差分数组查询的性质。
P5610 [Ynoi2013] 大学
题意:区间将
对于一个数
接下来考虑如何维护
总时间复杂度为
个人认为较为卡常,也许是这个方法常数较大。(upd:似乎不手写内存也能过)
P5356 [Ynoi2017] 由乃打扑克
题意:区间加,区间第
分块,块内排序。(排序后的数组最好附带一个原数组的编号)
(以下
- 区间加
整块打
时间复杂度为
- 区间第
小
散块通过归并排序为一组,一整块单独为一组。值域中二分答案,在每组中求出大于其的个数,判断加起来后是否达到
时间复杂度
理论上取
卡常技巧:根据块内最值求出二分上下界,能带来较大常数优化。
被神
P5047 [Ynoi2019 模拟赛] Yuno loves sqrt technology II
题意:区间逆序对数。
莫二离的本质:
适用范围:
设
在右指针移动到
在左指针移动到
而指针的移动对后续询问都有贡献,因此求前缀和后才是真正的答案。
由于二次计算需要
时间复杂度
略微卡常,调一下块长就能过。
P5072 [Ynoi2015] 盼君勿忘
题意:区间中所有子序列分别去重后的和取模。
~~吐槽:真的有黑吗???不过一个下位中位紫的莫队+光速幂科技。~
静态查询想到莫队。对于一个数
对于出现次数建立链表,并维护所有出现次数相同的数之和。(unordered_set亦可代替链表,稍慢)
考虑省去计算2的幂的
总时间复杂度
P5355 [Ynoi2017] 由乃的玉米田
弱化版:link
题意:区间查询是否存在两个数加,减,乘或除为
前三种操作使用莫队+两个
-
加:存在
,使得 ,变形得 ,即 。 -
减:存在
,使得 ,变形得 ,即 。 -
乘:暴力枚举每一对
的约数并查询其是否都存在。
前三种操作时间复杂度为
接下来考虑除法。
-
对于
:暴力枚举 到 的所有数,查询其是否存在即可。 -
对于
:单独处理,对于每一个 进行枚举,并令 从 扫到 : 表示最大的 使得 到 中存在一对商为 的数。对于区间问询 ,若 ,则存在。
感觉除法的难度比前三种加起来都高。
除法时间复杂度为
总时间复杂度
P7446 [Ynoi2007] rfplca
题意:一棵有根树,区间的父节点编号减去
现场听lxl讲了这题!
- 前置问题:link
考虑分块维护(1/1),
修改:整块暴力重构。
- 回到原题
一眼弹飞绵羊,可以说是一个强化版。
一般来说DS题有两种:修改很复杂、问询很简单;修改很简单、问询很复杂,此题属于前者——lxl
修改看起来很离谱,整棵树的顺序都被打乱了,而问询只需要求lca。因此考虑不维护树的结构。
考虑分块维护(2/1),
- 查询
lca的过程很像重链剖分。
对于
若
若
若
- 修改
散块暴力重构;
对于整块,由于每次修改后
时间复杂度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通