专栏文章
题解:P12569 [UOI 2023] An Array and Partial Sums
P12569题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mip818a2
- 此快照首次捕获于
- 2025/12/03 07:40 3 个月前
- 此快照最后确认于
- 2025/12/03 07:40 3 个月前
先把只需要操作零次和操作一次判掉,操作一次只需要操作整个序列即可,可以证明一定不劣。
有如下结论:操作次数不超过 。
这是因为我们发现对一个区间 做前缀和本质上是从 变成 。做后缀和本质上是从 变成 。所以如果我们找到 最小的位置 与 最大的位置 ,若 ,则能在两次之内完成,否则我们把序列取反,两个位置就会反一反,也能在三次之内完成。
接下来就是只需要判断操作两次是否可行即可,分四类情况讨论:
-
操作两次前缀和,容易证明每次操作一个前缀一定不劣,因此每次操作找到第一个不合法的位置,操作整个前缀。看看是不是只需要两次即可。
-
操作两次后缀和,同上。
-
操作一次取反之后变成了操作一次,判一下就行。
-
操作一次前缀和,后操作一次后缀和。枚举区间 ,我们将 的前缀和序列称作 。那么相当于在 且 且 。做到 是容易的。
-
考虑分治,那么可以将中间那个限制拆解到 左右两部分,首先枚举 ,然后求出最小的 使得 上的点全都合法。这个相当于把 这些点全都拿出来然后用 取作这个凸包上的切线,然后查询切线的斜率即可。所以只需要动态维护出 的凸壳即可。
-
接下来枚举 ,考虑对于一个左端点 , 需要满足的条件是让 的点全部合法,首先,查询 的最小值即可求出限制最紧的那个 ,这个也可以维护点集凸壳做到。接着,每个 都是一条 的关于 的直线,我们不妨求出凸壳之后直接取对于每个 的最大值,然后判断是否满足最紧的限制,如果满足则找到一组合法解直接输出。当然还要判一下 与 的限制,不过这部分是简单的。
-
复杂度瓶颈在于上述求切线部分需要一个二分,时间复杂度 。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...