P10149 [Ynoi1999] XM66F
这个。没写过。
P9991 [Ynoi Easy Round 2023] TEST_107
考虑这个等价于强制钦定一种数不选,所以答案就是一个位置 的相等前驱 / 后继与它的距离的最大值(若不存在则为 或 )。
分三种情况讨论即可做到单 。没写过。
P8512 [Ynoi Easy Round 2021] TEST_152
考虑直接颜色段均摊得出 个修改操作,然后可以发现唯一的问题就是有时候前面减掉的贡献是不存在的。那么设这次修改操作是把第 个区间覆盖到第 个区间上,那么前面减掉的贡献存在当且仅当 。
二维偏序即可单 。
P5524 [Ynoi2012] NOIP2015 充满了希望
和上一道题思路几乎一样,只不过变成了单点查询,连颜色段均摊都不用了。
P4692 [Ynoi2016] 谁的梦
火题。先拆贡献变成每个颜色分别统计,然后容斥变为某种颜色没出现过的方案数。这个东西乘法原理即可。单点修改相当于分裂一段或合并两段,直接 STL 维护即可做到单 。会涉及一些除零的构式细节。
P5527 [Ynoi2012] NOIP2016 人生巅峰
最开始想的是区间长度 时一定有解,实际上可以通过鸽巢原理分析出 时就一定有解。这个东西是 级别的。那么其它情况暴力跑背包即可。至于维护每个位置的实际值,可以通过 BIT 维护每个位置的次数,然后实际用到该位置的时候再将 BIT 对应位置改为 。使用 bitset 优化,时间复杂度为 。
P6108 [Ynoi2009] rprsvq
简单分析得到我们只需要维护区间和与区间平方和,剩下的部分就只是求几个只与 相关的系数了。求系数要推一坨东西,再见。
P9989 [Ynoi Easy Round 2023] TEST_69
每个点的有用修改次数之和是 的。直接线段树维护区间 来决定要不要向下递归。直接写应该是能过的。看了题解发现好像可以通过一些神秘方法做到单 。具体来说,pushup 的时候如果当前区间操作之前 才暴力 pushup,否则直接将当前区间 对 取 (而不是左右儿子取 )。分析无非就是,前者最多会操作一次,后者辗转相除次数均摊单 ,还是有点厉害的。
P9990 [Ynoi Easy Round 2023] TEST_90
考虑左端点从右往左扫,那么我们对于每种颜色只需要考虑它第一次出现的位置,然后该位置后面奇偶性都会改变。那么就相当于维护 序列,支持区间异或,区间历史和。可以简单做到单 。
P9995 [Ynoi2000] rspcn
这啥啊没见过啊。参考了题解。
借助 ODT 的思想,把一段有序段放在一起维护,然后就只需要若干棵权值线段树了。然后对于一种颜色,我们钦定它在它出现的最早位置计算贡献,那么可以将每一段的贡献放到段内对应序列上的右端点上,而每段的贡献都可以在对应的权值线段树上维护出来。最后那段被砍了一部分的段可以手动进去查。是大常数单 。