CF2117 题解

A. False Alarm

找最远的两个 \(1\) 的距离和 \(x\) 比大小即可。

B. Shrink

直接构造一个形如 \(1,3,5,7,6,4,2\) 的东西即可。

C. Cool Partition

取第一个元素当第一段,暴力往后找直到当前段包含上一段即可。

D. Retaliation

首先如果这个序列不等差就无解。

然后我们设差为 \(x\),若 \(x>0\) 则做 \(x\) 次操作一,否则做 \(-x\) 次操作 \(2\),剩下的就是若干次每个位置减去 \(n+1\),判一下即可。

E. Lost Soul

发现对于一个位置,它可以使前面的一个波浪形状的位置全部变成它。然后就倒着扫一遍,判断这个位置后面是否能把这个位置的两个数弄成一样的即可。

F. Wildflower

发现树至多两个叶子,而且一个叶子是简单的。

两个叶子相当于在一个地方分叉,设分叉后的两条链长度为 \(x,y\),则答案为 \(2^{n-x-y}\times (2^{x-y-1}+2^{x-y})\),这里的次数要和 \(0\)\(\max\)

G. Omg Graph

枚举最大边权,用 dsu 找到当前能走到的最小边权,两个东西加到一起的结果取最小的那个即可。

H. Incessant Rain

首先对于一个 \(x\),我们把 \(a_i=x\)\(i\)\(b_i=1\),其它位置 \(b_i=-1\),那么答案就是最大子段和除以 \(2\) 下取整对于所有 \(x\) 取最大值。

然后你有一个主席树做法,就是对每个 \(x\) 都搞一个版本,然后修改就新建版本,所有版本的答案用 mutiset 存起来即可。

但是非常遗憾,出题人觉得这个做法的空间太不优秀了,所以卡了这个做法。

我们继续观察,发现对于每个 \(x\),修改是独立的(场上我没有注意到这个,只写了被卡的主席树)。于是把修改离线下来,对于每个 \(x\),都做一遍包含它的修改,这样的修改总共只有 \(2\times q\) 个。

可以发现,这个修改会造成在某一次修改后,multiset 要删除一个东西再加入一个东西。所以把这个东西存下来,然后跑一边所有修改即可。

posted @ 2025-06-09 14:03  zxh923  阅读(66)  评论(0)    收藏  举报