Ynoi 选择性食用
简单没写清单
- [Ynoi Easy Round 2017] 由乃的 OJ:裸树剖
- [Ynoi2013] 大学:。。。
- [Ynoi Easy Round 2016] 炸脖龙 I:会拓展欧拉定理就会了
- [Ynoi Easy Round 2022] 虚空处刑 TEST_105:维护儿子信息(“邻域维护父亲一定死”)
- [Ynoi Easy Round 2022] 超人机械 TEST_95:记录最前和最后的下标就可以做到本质不同
- [Ynoi Easy Round 2023] TEST_90:矩阵维护历史和
- [Ynoi Easy Round 2025] TEST_176:平衡树模板
- [Ynoi2006] spxmcq:直接做
- [Ynoi Easy Round 2016] 镜中的昆虫:每次修改前驱点变化 O(1) 个,CDQ
- [Ynoi2003] 铃原露露:支配对,扫描线
正文
[Ynoi2010] y-fast trie
是好做的,另一种朴素想法是维护所有 对,数量级太大。对症下药,考虑一些类似支配对的东西:如果对于 来说 最优,对于 来说 最优,那么 必定优于 ,最后只要记录互相选择的答案。每次修改只会涉及最多 个元素的修改,。
[Ynoi2010] Fusion tree
打个儿子 tag,Trie +1 trick。
[Ynoi Easy Round 2025] TEST_34
区间修改不好做,差分得到 ,发现原来线性基等价于 和 构成的线性基。暴力是 3log 的,使用 zak 在 WC2025 介绍的方法:取区间的 个子集,最后这 个子集异或和的值构成的线性基可以代替原来的,2log,证明在下面。

[Ynoi Easy Round 2023] TEST_107
答案取值三种情况:把一种值从左边切掉,从右边切掉,或者从两边切掉,都是二维数点。
[Ynoi2002] Goedel Machine
把最大公约数的贡献拆到所有质因子上。即对于所有 ,所有 的乘积即为答案。考虑莫队, 的预处理,剩下的总共信息量 ,可以暴力算。
[Ynoi Easy Round 2024] TEST_132
如果 的的值域很小,每次查可以暴力枚举 ;如果 很小,每次修改就可以暴力。结合起来就得到了 的做法,观察到 ,对每个 预处理光速幂,这里分四段预处理就是 ,可以接受。
[Ynoi2018] 五彩斑斓的世界
分块,如果把每块的 看成势能那么势能不降。散块直接重构,剩下对每个整块维护并查集,如果操作的数 ,那么暴力把 的值减掉,否则把 的值合并,并打一个 的 tag。
[Ynoi Easy Round 2020] TEST_100
和上面题一样,这里分块预处理经过每一块的值域映射。
[Ynoi Easy Round 2021] TEST_68
找出全局最大异或对,那么除了两个点对应祖先答案不是最大值其他都是,对祖先暴力。
[Ynoi2005] rmscne
对 扫描线。线段树每个点 存储最小的 使得 出现的颜色数等于 出现的颜色数,修改是区间覆盖。查询的时候要找到最大的位置 使得 出现的颜色数等于 出现的颜色数,可以线段树二分,一个比较巧妙的做法是维护一个并查集,每次扫描到一个数 把上一个相同颜色出现的位置 合并到 ,代表 已经被 代替了,那么只要查询 所在的并查集。
[Ynoi2006] rldcot
找支配对,对编号启发式合并,合并之后相邻两个即为支配对,扫描线。
[Ynoi2077] stdmxeypz
普通分块是容易的,有个简单一点的写法是把子树拍成 dfn,并对 dfn 分块,再根号分治就对了。
[Ynoi2008] rplexq
令 ,那么答案为 。如果度数 ,直接全局扫描线,平衡一下是 的。 的可以对每个点上的询问莫队,复杂度是 的。后面的瓶颈在于指针移动次数,如果我们子树大小前 大的全局做,后面的莫队,那么离散化一下,莫队总长度应该是 的, 即可通过。
[Ynoi2013] 对数据结构的爱
先考虑能不能分块。我们希望能预处理每块 段的分段函数,这样可以单次 内回答一个询问。考虑分治,令 分别表示序列的 ,能减掉 个 的最小初始值。容易发现最终 要减掉 个 ,左区间减掉 的个数越小越好,合并可以线性双指针。其实可以发现直接对整个序列分治,等价于线段树,复杂度是 ,足以通过此题。
如果直接暴力分块,复杂度是 。预处理和查询不平衡,可以做两次分块(其实等价于两层的线段树,还是一样的),分别取块长为 和 ,那么询问可以分成 个大小为 和 的块,还有 块大小为 的散块,复杂度为 ,平衡 得到复杂度为 。
[Ynoi2012] 惊惶的 SCOI2016
对于每种颜色单独统计贡献,容斥一下变为求有色连通块平方和,每个点记录以其为根的有色连通块大小。修改需要查询一个点深度最大的无色祖先,这个可以树剖对每条重链维护一个 set;还需要求孩子的连通块平方和,动态维护每个点的轻儿子平方和,修改只要 次,时间复杂度单 。
[Ynoi2002] Adaptive Hsearch&Lsearch
我们对平面按照网格长度为 分块,每次只要找到每个块内相邻 个点对和相邻块合并起来,按照编号排序相邻的 个点对,其中 是一个常数,取 左右,大概的构造可以看一下讨论区的 hack,原理就是对于一个固定的 ,构造一个块内的 个点,使得这 个点在划分成 的时候不在一个块。然后就是二维数点,因为支配对数量太大了所以分块平衡一下,时间复杂度 。
[Ynoi2004] rpmtdq
先把树点分了,那么两点距离变成了 ,不用考虑同个子树的问题,因为不优(好写一点)。 个支配对,离线乱做。
[Ynoi2024] After god
换维扫描线,对序列扫,那么就是区间 chkmax 历史和,可以吉司机,然后历史和随便怎么写都行。当然此题也有比较繁琐的单侧递归线段树的 2log 做法,不赘述。
[Ynoi2009] pmrllcsrms
序列每长度为 分一块,三种情况,整块内,跨整块,跨散块,都好算。
[Ynoi2009] rprmq1
把矩形第一维拆分掉,把询问第二维放到线段树上,直接对这个线段树 dfs,同时维护一个历史最大值线段树就对了,,把第二维换成二区间并可以砍掉一个 。