题意简述
给定长为 的序列 。要求支持以下操作:
- 给定 ,将 全部加上 ;
- 给定 ,将 全部乘以 ;
- 给定 ,若这是第 次操作,则保护 直到第 次操作(含),这期间操作 对 无效。若 已经被保护到 ,则这一保护不会失效。
- 给定 ,输出 ,对 取余。
。
给定长为 的序列 。要求支持以下操作:
。
Atcoder ARC149D – Simultaneous Sugoroku
官方题解做法是线性的,在此不再赘述。
考虑对于纸片 分别计算答案。每次暴力枚举显然不可取,但假若我们知晓对于 ,在 次操作以后纸片在数轴上的坐标 ,其中 是最小的取到 的位置,则对于 :
这是可以用区间树维护的:我们想要快速求出全局非正数最大值以及首次取到该最大值的位置,同时支持全局加 、后缀所有数符号翻转 ()。那么同时维护区间非负数最大值、正数最小值以及首次取到他们的位置,采用延迟标记更新(两种操作对于前述信息是具有结合律的,形成幺半群)即可。
时间复杂度 ,常数一般。
CodeForces Round #502 Problem G – The Tree
这是lty数据结构专题里唯二自己做出来的题目中的一道。
如果不包含“将 的子树全部染白”的操作,应当怎样处理?
题目所给操作可以这样转述:令 为本次染色操作的节点。若 为白色,则立刻染黑并退出;否则我们找到其子树中的,与 相连的黑色连通块,则对于每个连通块底部节点,若其不是叶子节点,我们将其儿子染黑。
由于本题的树没有特殊性质,且将来加入回退操作,故而难以维护整个连通块以及其叶子节点。因此,我们可以从“在何种情况下,节点 被染黑”的方向考虑。
显然,只有从在 到根的路径上的节点开始的染色操作,才可能波及到 。假如最终 被染黑的一瞬,它被包含在了以 为根的连通块中。令链 为 ,那么自然想到,一种一定合法的染色序列是 ,其中有 ,也即我们每一步都在该连通块内部,并将连通块的最大深度推进一层。
这种序列确实合法(它是充分条件),但这真的是 被染黑的必要条件么? (更多…)
一场相当有收获的比赛。比赛链接
尝试观察规律。我们发现,在完成次操作以后,左端点的可能取值为,右端点的可能取值为。假如现在我们达到最终状态,其。那么,在的二进制表示中,如果从高到底第位为,则在第轮中,有check (mid) == 0
,向右区间递归;否则向左区间递归。这是很容易解释的:若向右递归,则右端点不变。而在下一层,右端点表示中的所有系数乘,所以体现为二进制位末尾添一个。反之,就变成,在下一层中体现为。如果其有位为,则到达该状态的概率为。
以时的状态为例。的三位二进制表示为,则推断出在前三轮分别向右、左、右区间递归,到达其的概率为。 (更多…)