5月CF杂题
Codeforces Round 864 (Div. 2)
这场就不写题意了,可以去看官方题意。
CF1797C. Li Hua and Chess
假设国王的位置为 \((x,y)\),要走到 \((a,b)\)。可以发现步数就是 \(\max(\left|x-a\right|,\left|y-b\right|)\)。显然可以一次询问 \((a,b)=(1,1)\) 得到 \(\max\left(x,y\right)\)。
对于 \(\max\left(x,y\right)>n\) 或 \(\max\left(x,y\right)>m\) 的这些情况,我们就可以确定 \(\max\left(x,y\right)=y\) 或 \(\max\left(x,y\right)=x\)。再问一次就可以得到答案。
对于其余情况,令 \(t=\max\left(x,y\right)\),我们再询问一次 \((a,b)=(t,t)\),这样就可以得到 \(\min\left(x,y\right)\)。最后再询问一次判断答案是 \((\min\left(x,y\right),\max\left(x,y\right))\) 还是 \((\max\left(x,y\right),\min\left(x,y\right))\) 即可。
CF1797D. Li Hua and Tree
很蠢吧。直接丢到 set 里模拟题意即可。
CF1797E. Li Hua and Array
首先修改直接吉司机就行,因为偶数每次至少减少一半,奇数每次会变成偶数,所以操作次数上界 \(2\log A\)。这个询问很不寻常,我们重点考虑询问。
这个询问可以转化成一个图的问题。更具体地,我们把所有数看成点,在这个图中有很多形如 \(\varphi(i)\rightarrow i\) 的边,每次 \(a_i\leftarrow \varphi(a_i)\) 的操作就可以看成跳到父亲。所以询问就是求 \([l,r]\) 内所有数到他们的 \(\text{lca}\) 的距离之和。
这样看上去是 \(O(n\log n\log^2 A)\) 的,时间和空间都接受不了。但是你发现树高其实最多 \(\log A\) 级别,所以复杂度其实是 \(O(n\log n\log A\log\log A)\) 的,而且跑不满。
ps:为什么对于奇数 \(a\),\(\varphi(a)\) 一定是偶数?把 \(a\) 分解成 \(a=\prod\limits_{i=1}^mp_i^{c_i}\) 的形式,因为 \(\varphi\) 是积性函数,有 \(\varphi(a)=\prod\limits_{i=1}^m\varphi(p_i^{c_i})=\prod\limits_{i=1}^m(p_i-1)(p_i^{c_i-1})\)。因为 \(a\) 为奇数,所以 \(p_i\) 一定是奇素数。
pps:yy 了一个更优的做法(因为当时没回想到树高的性质),不过过了就没写。大概就是除了第一遍建树的时候需要暴力求一下 \(\text{lca}\),其他时候你跳到父亲的修改都可以 \(O(1)\) 维护。更具体地,如果有修改,那么区间 \(\text{lca}\) 会改变当且仅当有一个点会在跳跃后超过现有的 \(\text{lca}\),且至多上升一层,你判一下就行。这样就是 \(O(n\log\log A+n\log n\log A)\) 的(没写,正确性不保证)。
Educational Codeforces Round 149 (Rated for Div. 2)
E. Playoff Fixing
鸽了。
F. Editorial for Two
题意:在 \(a_1\ldots a_n\) 中按原顺序保留恰好 \(k\) 个数 \(b_1\ldots b_k\),序列 \(b\) 的代价为 \(\min\limits_{p=0}^{k}\left\{\max\left(\sum\limits_{i=1}^pb_i,\sum\limits_{i=p+1}^kb_i\right)\right\}\),求最小代价。\(1\le k\le n\le3\times 10^5\),\(1\le a_i\le10^9\)。
二分答案。对于每个前缀/后缀贪心保留最小的,可以求出最少要删多少个。