B

https://codeforces.com/contest/2163/problem/B #思维题 #分类讨论 #观察 #构造

首先是题面一定要读仔细,漏读条件就会导致大量时间的浪费,在这道题就是后面才看到 $x_{i}=0$ 的时候,$s_{i}$ 可以是任何值

其次要注意观察数据范围,题面先是提醒最多五次操作,又强调你不必要用最少次数去做,其实意思已经非常明显了,那题面就是明着告诉你,你现在要构造一个 5 次的操作,让所有的情况下,这个操作都可以符合条件

要这样其实就是要把 s 几乎全为 1,因为根据规则不难看出,边界不可能为 1,1 和 n 所在的下标也不可能为 1,这些地方如果为 1,就直接输出-1

那么考虑怎么样才能让一次操作尽可能地多地让 0 变为 1,也就是选择最小值和最大值,所以我们注意到 1 和 n 两个特殊的值

![[Pasted image 20251126141716.png]]

这样画就有了,可以做到所有节点以外都为 1

C

https://codeforces.com/contest/2163/problem/C #前缀和 #后缀和 #合并区间 #去重

这道题主要卡我的点在于如何去重

不难注意到,我们实际上只有 n 条不同的路,对于每一条路我们都可以得到最小的区间,但这里面存在重合,那么怎么去重呢?

我们可以先获得每一条路的最小区间,所有满足条件的区间需要至少满足至少包括这些区间的一个

我们先假定以某一个 l 点出发,只要找到满足题意的最小的 R,再遍历一遍所有的 l 点,把满足条件的数量相加就是答案了

那么怎么找出满足题意的最小 R 呢?

这里需要用后缀最小值来实现