杂题小记(2023.02.24)

更好的阅读体验戳此进入

LG-P5251 [LnOI2019]第二代图灵机

题面

维护一堆奇奇怪怪的东西。

Solution

考虑线段树维护权值,支持单点修改区间 max 和区间 min,ODT 维护颜色,然后在 ODT 上做双指针并在线段树上查询即可,细节巨多,双指针边界需要精细考虑并实现,还感觉有点类似莫队的思想,好题

Code

LG-P3765 总统选举

题面

给定 n 个人的投票,m 次询问给定 l,r,s,k[l,r] 区间严格众数,若不存在则认为为 s,并给定 k 个数将这些人的投票均改为求出的严格众数,每次输出求得的区间严格众数,特别地,所有操作完成后需要再对 [1,n] 求一次区间严格众数,不存在则输出 -1

Solution

首先摩尔投票默认为前置知识不再提了,不难发现区间众数不支持合并,而摩尔众数形式表示的区间众数则支持,合并是平凡的,则开一颗权值线段树即可。同时考虑验证部分,不难想到对每个人开一个平衡树记录有哪些人对其投票了,这样可以支持动态修改,然后每次查询一下 [l,r] 内有多少并与总长度比较判断即可。值得一提的是不难发现本题平衡树功能平凡,于是考虑直接使用 tree < int, null_type, less < int >, rb_tree_tag, tree_order_statistics_node_update > 维护即可,可以大幅减少码量以及错误率,但时间上略有降低。

Code

UPD

update-2023_02_24 初稿