数据结构做题笔记
突然发现数据结构太菜了,这里记录一些数据结构题。
CF1085F Rock-Paper-Scissors Champion
一排的人,玩石头剪刀布,预先设定好手型。
你可以做局,让某相邻两个人比,平局做局一个胜者。
问有多少人可以被你做局成冠军。带修。
以石头为例,一个人可以被做局的充要条件:左右两边如果有布则一定有剪刀。
这个就简单了:找到左右第一个布的位置和第一个剪刀的位置,然后就是区间数点。
鉴定为简单题。
CF837G Functions On The Segments
给你 \(n\) 个分段函数形如两段平台夹一个一次函数,求单点区间函数值的和。
处理分段函数可以考虑做一个数点:对于询问的 \(x\),一个查询的 \((x_1,y_1)\) 恰好在 \(x\le x_1\) 时贡献。
这时问题就变成了:一个分段函数 \((i,x_1,x_2,a,b)\) 和查询 \((x,l,r)\),算一个满足 \(x_1\le x \le x_2\) 和 \(l\le i\le r\) 的贡献 \(ax+b\)。
查询显然可以差分成单点,分段函数的贡献显然也可以拆开。
于是问题变成对于 \((i,x_2,a,b)\) 和 \((x,r)\) 算满足 \(x\le x_2\) 和 \(i\le r\) 的 \(ax+b\)。
\(i\le r\) 这一维考虑主席树,正好可以维护后缀 \((a,b)\) 的并。
鉴定为简单题。
P4385 [COCI 2009 Final Exam#2] Dvapravca
平面黑白点,找到不存在黑点且所带白点最多的平行线,求白点数量。平行线不经过任何点。
考虑枚举斜率,然后找最大的两条线。
不会……
开了。
woc 竟然是做关于平行线的垂线!!
问题就成功被转换成了最长连续白点段。于是直接维护什么时候两个点的顺序改变即可。\(O(n^2 \log n)\)。
CF1684F Diverse Segments
给你一个序列和一些区间,你需要选择最短的子段随意更改使得所有区间内的数都互不相同。
考虑子问题:询问能否不删除任意子段。你考虑每个数和前驱组成一组,如果某个区间包含了一个以上,那它就不合法。
继续这个思路,考虑前驱对。发现复杂度优化不下去。
思路卡住了,从区间本身入手。
包含区间显然可以直接去掉。现在区间双单调了。同时去掉已经满足条件的区间。
注意到一个显然的结论:左端点在第一个区间,右端点在最后一个区间。
那么不交的直接删除即可。
失败了。
从题解区获得了一些新的思路,自己再尝试一下。
我们的目标是找到最佳支配点对。
容易发现一个区间给出了两种限制:一种是必须选的点,一种是二选一的点。
对每种颜色分开考虑。对每个点考虑其作为二选一的点的配套。显然:找到覆盖它的最优右端点的前面即可。
这时同时加入当前点的后继,即可同时完成两种限制。\(O(n\log n)\)。
CF700D Huffman Coding on Segment
相当于求区间 WPL。
首先思路就是按照出现次数大小直接合并算贡献。
但这个思路没有一点能扩展到区间的感觉。
考虑莫队。压力马斯内。
出于方便考虑,你可以直接维护关于出现次数的数列。
但其实这题的关键不在于时刻维护区间的答案,而是根据次数信息在询问时获得答案。
考虑根号分治。大数少直接最后跑,小数从下往上合并,多的再给大数一起跑。
复杂度瓶颈在霍夫曼树的构建,\(O(n\sqrt{n\log n})\)。
P2664 树上游戏
从每个点出发的所有路径的颜色种类数的和,颜色在点上。
就是直接对颜色建虚树,然后跑树上差分即可。
鉴定为简单题。
CF1316F Battalion Strength
序列的贡献是排序后相邻积的和。单点修改求序列权值期望。
期望是假的。

浙公网安备 33010602011771号