「解题报告」Codeforces Round 668 (Div. 2)
两场 Div.2 爆肝上蓝系列……
A. Permutation Forgery
这题是精心构造样例给选手降智啊….卡了我半小时 /kk
实际上反过来输出就好了啊…
1 | const int CN = 110; |
B. Array Cancellation
容易发现答案就是后缀和的最大值…证明显然啊,就算了吧…
1 |
|
C. Balanced Bitstring
容易发现模 $k$ 相同的位置, 字符应当是相同的,那么模拟即可。
1 | const int CN = 1e6 + 10; |
D. Tree Tag
容易发现初始位置看似是无用的,那么把树的直径找出来判断即可。
1 | const int CN = 1e5 + 5; |
E. Fixed Point Removal
容易发现一个点能否被消除仅与询问的左边界 $l$ 有关,设 $p_i$ 为可以令 $a_i$ 消除的最大的 $l$,则答案是 $\sum\limits_{i=l}^r[p_i\ge l]$,这是一个愉快的二维数点。
考虑 $p_i$ 如何求出,容易观察到如下性质:
- 若 $a_i > i$,则可以定义 $p_i = 0$;
- 若 $a_i = i$,显然 $p_i=i$;
- 若 $a_i < i$,则 $p_i=\max m, \text{s.t.} \left( \sum\limits_{j=m}^{i-1}[p_j\ge m]\right) \ge i - a_i$
前两条都好处理,最后一条二分即可,套一个静态主席树解决二维数点,时间复杂度 $O(n\log^2 n+q\log n)$。
代码:
1 | const int CN = 3e5 + 5; |
「解题报告」Codeforces Round 668 (Div. 2)
https://big-news.cn/2020/09/07/「解题报告」Codeforces Round 668 (Div. 2)/