覆盤
T1 一眼不會。模擬樣例的時候好像得到了一個對於每次詢問 \(\mathcal O(n)\) 做的暴力演算法。不太清楚。
畫了點圖。差不多得到一點想法。發現用 set 維護連通塊,總複雜度 \(\mathcal O(n \log^2 n)\),1e6 肯定過不去。但應該能過 80。寫寫試試。
然後寫了一坨。實際上這個時候思路還是很混亂的。
發現有一步不會寫,隨便蒙了個東西糊上去。顯然假。但是資料似乎挺水應該能騙不少分。(這時還不知道捆綁測試。)
2.5h 了趕緊往後看題。
T2 送了 \(10\) 分。部分分好像是倍增。先寫寫試試 \(m=1\) 的。
沒過手造樣例。擺了不調了,或許做法是假的。
T3 什麼玩意。
T4 送了 \(18\) 分。性質好像都不太會做。寫吧。
\(0+0+0+18\)
總結
不足:
- T1 不會做。
- T2 除錯沒刪。
- T2 部分分不會做。
- T4 性質不會做。
腦子跟被吃了一樣,啥也不會。
知識點
T1:數學
T2:倍增
題解
A. 排序
令 \(f(i,j)\) 為 \(i,j\) 在二進位制下最高的不同位。
在 \(a_i \ne a_{i+1}\) 的情況下,如果想讓 \((a_i \oplus x) \le (a_{i+1} \oplus x)\),那麼 \(x\) 的第 \(f(a_i,a_{i+1})\) 二進位制位是唯一確定的。這取決於 \(a_i < a_{i+1}\) 還是 \(a_i > a_{i+1}\)。
所以判斷矛盾就很好做了。
然後一次單調修改只會影響 \(\mathcal O(1)\) 個位置。這些位置重構即可。
真服了這麼簡單為啥想不到。真服了這麼簡單為啥想不到。真服了這麼簡單為啥想不到。
B. 交換
注意到對於 \(i_0=j,i_1=j+\operatorname{lcm}(n,m)\),有 \((b_{i_0 \bmod m}+i_0)\bmod n = (b_{i_1 \bmod m}+i_1)\bmod n\)。
也就是說每 \(\operatorname{lcm}(n,m)\) 次操作後,交換的兩個數的位置是相同的。
所以求一個排列 \(p\) 表示第 \(i\) 個數經過 \(\operatorname{lcm}(n,m)\) 次操作後,\(a_i \gets a_{p_i}\)。用倍增讓它跳 \(\lfloor t/\operatorname{lcm}(n,m) \rfloor\) 次。最後剩下的 \(\operatorname{lcm}(n,m)\) 次暴力。
這玩意就能過 \(60\) 分。
真服了這麼簡單為啥想不到。真服了這麼簡單為啥想不到。真服了這麼簡單為啥想不到。
考慮正解。
首先如果 \(m\) 是 \(n\) 的倍數那麼跟上面做法一樣。
考慮 \(m\) 不是 \(n\) 的倍數的情況。
——官方題解
注意力驚人的出題人。