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\)

定义一个区间函数如下:

\[f([l,r])=[\min\{a_l,\ldots,a_r\},\max\{a_l,\ldots,a_r\}](l \leq r) \]

你需要回答 \(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)\),于是直接倍增即可。

posted @ 2025-09-01 17:24  Eliauk_FP  阅读(2)  评论(0)    收藏  举报