CF1707
A. Doremy's IQ
哆来咪·苏伊特参加了 \(n\) 场比赛。 比赛 \(i\) 只能在第 \(i\) 天进行。比赛 \(i\) 的难度为 \(a_i\)。最初,哆来咪的 IQ 为 \(q\) 。 在第 \(i\) 天,哆来咪将选择是否参加比赛 i。只有当她当前的 IQ 大于 \(0\) 时,她才能参加比赛。
如果哆来咪选择在第 \(i\) 天参加比赛 \(i\),则会发生以下情况:
- 如果 \(a_i>q\),哆来咪会觉得自己不够聪明,所以 \(q\) 将会减 \(1\);
- 否则,什么都不会改变。
如果她选择不参加比赛,一切都不会改变。哆来咪想参加尽可能多的比赛。请给哆来咪一个解决方案。
\(n \leq {10}^5\),\(q,a_i \leq {10}^9\)。1s / 250M。
观察到最后让 IQ 减少的位置一定是一个后缀,于是二分这个后缀即可。
B. Difference Array
你有一个初始长度为 \(n\) 的有序数组 \(a\)(从小到大)。设 \(a\) 当前长度为 \(l\),你要对 \(a\) 作差分,即令 \(b_i = a_{i+1} - a_i(1\le i < l)\),然后将 \(b\) 数组从小到大排序,接着让 \(a_i = b_i(1 \le i < l)\),并继续执行上述操作。
显然,每一次操作后 \(a\) 数组的长度都会减少 \(1\);执行 \(n - 1\) 次操作之后,\(a\) 中只会剩下一个元素,请你输出这个剩下的元素。
\(n \leq {10}^5\),\(a_i \leq 5 \times {10}^5\)。1s / 250M。
每次操作后,序列总和 \(S\) 都会变为 \(a_n - a_1\),而 \(a_n\) 是 \(O(\frac{S}{n})\) 量级的,所以经过 \(\log\) 次变换后就基本上都是 \(0\) 了,所以只保留有效位置暴力做即可。
E. Replace
给定一个长为 \(n\) 的序列 \(a_1,\ldots,a_n\),其中对于任意的 \(i\) 满足 \(1 \leq a_i \leq n\)。
定义一个区间函数如下:
你需要回答 \(q\) 次询问,每次给定区间 \([l_i,r_i]\),问其最少经过多少次 \(f\) 的调用(即 \([l,r] \to f([l,r])\))使得区间 \([l_i,r_i]\) 变成 \([1,n]\),若无解则输出
-1
。\(n,q \leq {10}^5\)。1.5s / 1000M。
容易发现,对于任意有交的区间 \(A\) 和 \(B\),有 \(f(A \cup B) = f(A) \cup f(B)\),于是直接倍增即可。