2024.8.15
蓝紫紫黑
T1 Kanon
\(n\) 个点,\(q\) 次操作,每个点初始在 \(A_i\) 的位置,每次操作会将所有点整体移动 \(W_i\) 步,如果一个区间被第一次覆盖到,那么给覆盖它的点加上这个区间长度。求 \(q\) 次操作后所有点的权值。\(n,q \le 2 \times 10^5\),\(|A_i|,|W_i| \le 10^{12}\)
场上觉得这玩意相当抽象,差点就上动态开点。为什么就不能多想一点点,哪怕想到区间重叠后不再贡献这题也就切了。
一堆点整体移动,相对位置不变。这也是我直接写在纸上的。给了个样例告诉你只有一个点的时候,它的答案就是划痕长度。为什么?因为没有其他点干扰它。啥点能干扰它累答案?只能是它旁边的点吧。想这样一个情境,两个点同时向右移动,右边的点吃到所有移动贡献,因为它向右移动的所有地方都是第一次被扫到;而左边的点能吃到的贡献只有两点间的距离,因为它一旦移动到右点的初始位置,就走在右点的划痕上了。它向右再不能吃到贡献了,因为右边的点总会先吃。
这时左点还想要贡献怎么办?向左走。走到初始位置以左,它就能吃上新贡献了。
因此我们发现,正常情况下,一个点的答案就是它的划痕长度。但是它向两边可能突然就没答案能累了,因为它和两边点的区间重合到了 。
发现这个东西是具有单调性的,因此可以二分时刻。
思路就这么多了,具体的处理办法:处理出每个点到左右两边的距离,以及每个时刻所有点向左向右延伸的最远长度。接着二分时刻,找到每个点向左和向右第一次交汇到别的点的区间的时刻的前一个时刻。为什么是前一个时刻?因为至少到这里,这个点还是能吃到这个方向的所有贡献的。接着只需要判断区间交汇的那一次是整体往左还是整体往右。整体往左是靠右的点吃贡献,否则是靠左的点吃。
按着思路随便模拟就过了。
这题就是属于只要想到二分,就瞬间降黄。
T2 Summer Pockets
暴力的话状压每个位置的切空状态,算出每个散块的边界位置,搜。画个图就比较好写,一遍过样例。
将填满 \(X,Y\) 的矩阵横纵切,使得每一个块中都 恰好 有两个 \(Y\),求方案数。
首先 \(Y\) 的个数如果是奇数,一定无解。
假设一共有 \(n\) 个 \(Y\),那么一共需要分 \(\frac{n}{2}\) 块。接着枚举横着竖着各砍几刀,我们需要判断这样砍能不能有解,以及砍法。
T3 空之境界
这题是只要想到区间 \(\text{dp}\),就能瞬间切掉 \(\text{60pts}\)。。
由于被 \(\text{T1}\) 假做法折磨、并且急于打 \(\text{T4}\) ,我选择直接暴力,一点都没多想。
这式子……\(60\) 分白送。
T4 穗
满穗再次降临,又带来了一道 \(\text{Ynoi}\) 黑。
由于题面十分简洁,就全放吧。
您正在送穗到洛阳刺杀豚妖,然后官兵来了,于是您只能做数据结构题了:
维护一个长为 \(n\) 的序列 \(a_i\),有 \(m\) 次操作。
- 将区间 \([l,r]\) 的值修改为 \(x\)。
- 询问区间 \([l,r]\) 出现了多少种不同的数。
第一眼:这不数颜色,带修莫队秒了。第二眼:区间修改??于是它就变成了一个 \(\text{cdq}\)+扫描线+树状数组的三维偏序。