[Codeforces] Mashup 練習 1
選訓上了 希望不要墊底><
1354D - Multiset
題敘
Link
在記憶體限制下實作一個Multiset支援刪除第k項。
想法
用線段樹/BIT,
可以在上面二分搜,
注意BIT的二分搜,仔細想一想,可以用BIT的特性做到$\mathcal{O}(\log N)$查詢,
AC Code
747E - Comments
題敘
Link
給定一個留言壓平的序列(格式參考題目),輸出以階層拆解後的樣子。
想法
DFS裸題,稍微想一下就過了。
AC Code
1450D - Rating Compression
題敘
Link
把原陣列($n$項)分別每$k (1 \leq k \leq n)$做最小值成為$n$個新陣列,
判斷哪些$k$的時候滿足新陣列是$1$到$n - k + 1$的排列,
想法
注意不同位置會被多個取最小值的區間涵蓋到,
例如$1 < k < n$時$1$只能在陣列的兩端,否則會有兩個區間處理後值為$1$,
所以如果當前陣列有解,可以從兩端是否是最小值判斷。
細節
注意特判$k = 1$及$k = n$。
1172B - Nauuo and Circle
題敘
Link
有一顆樹,
求樹的所有節點都在圓上的等分點的時候,邊不交叉的可能排列數
輸出$\mod 998244353$。
想法
令根節點(1號點)在最上面,考慮他的子樹分布排列,
等同於他子節點的排列數$\times$所有子樹可能相乘(因為不同子樹的節點不會交叉),
再考慮旋轉圓有$n$種可能。
細節
注意計算子樹的時候除了根節點(1號點)都要把自己加下去排列,
可以自己推看看。