原创 洛谷 P9358 [ICPC2022 Xi'an R] Bridge(Splay)

傳送門 解題思路 把每個國家的城市看成一條鏈。 那麼建橋操作相當於將兩條鏈的某處斷開,然後交換斷點後面的部分。 查詢操作就是從鏈首開始找到鏈尾屬於哪個國家。 這些操作可以由Splay平衡樹來維護。 相當於開n個平衡樹。 但是總點數O(NM)

原创 CF514D R2D2 and Droid Army(二分,ST表)

傳送門 解題思路 直接二分能幹掉的人數,然後check函數枚舉所有區間,因爲 m 很小,所以可以用 m 個ST表預處理每個區間對應每個屬性的最大值。 一是需要注意二分的寫法,而是注意check(0)時候的特判。 AC代碼 #include<

原创 CCPC2023深圳 K-四國軍棋(線段樹維護單調棧哈希值)

傳送門 解題思路 對於每個人的棋子,總是最高的那個棋子發揮決定性作用,被消耗後,再看剩下的最高的棋子。這就相當於單調不遞增棧的維護過程。 最後就要比較兩個人的單調不遞增棧是否完全相同。 和經典的樓房重建相似,但是這個題不止需要維護單調棧的長

原创 洛谷 P4198 樓房重建(線段樹上二分)

傳送門 解題思路 動態維護區間裏面單調遞增斜率的長度 需要維護兩個信息:上述長度,和區間最大值(合併時需要) 難點在於兩個子區間的合併。 左區間的樓房一定都能看見(沒有遮擋),所以要在右區間二分,找到左面最大值 lmax 在右區間的位置,然

原创 Kosaraju 算法學習筆記(求強連通分量)

寫起來簡單無比,不比 Tarjan 香? 方法 按照[1...n]的順序在反圖(邊方向相反)上dfs一遍,出棧時將節點存入數組q[1...n]中 按照q[n...1]的順序在原圖上dfs一遍,每次遍歷就是一個新的強聯通分量 爲什麼是正確

原创 ABC 331 F - Palindrome Query(字符串哈希,樹狀數組)

字符串哈希 [OI-Wiki](字符串哈希 - OI Wiki (oi-wiki.org)) 分爲兩種哈希方式:以左爲高位 和 以右爲高位 如果只是快速查詢每個字串的哈希值,用以左爲高位比較簡單,即 \[Hash[l...r]=Hash[1

原创 洛谷 P2290 [HNOI2004] 樹的計數(Prufer序列,Cayley 公式)

傳送門 解題思路 關於Prufer序列的構造,見OI-wiki 這裏直接放結論: 一個Prufer序列與一個無根樹一一對應 度數爲 \(d_i\) 的節點在序列中出現了 \(d_i-1\) 次 \(\sum(d_i-1)=n-2\) n個

原创 AtCoder Beginner Contest 324 DF題題解

比賽鏈接 D - Square Permutation 其實比較簡單,但是比賽時候腦子不轉了,竟然在嘗試枚舉全排列,然後算了一下複雜度直接不會做了。 正解應該是枚舉完全平方數,底數枚舉到 \(sqrt(10^{14})\) 即可,因爲 n

原创 Codeforces Round 903 (Div. 3)

[比賽鏈接] A. Don't Try to Count 直接用string的可加性,每次 s+=s 相當於翻倍了,因爲 \(nm<=25\) 所以最多翻倍5次。 判斷什麼的直接模擬就行。 #include<iostream> #inclu

原创 AtCoder Regular Contest 166 AB題題解

A - Replace C or Swap AB 個人感覺挺有意思的一道思維題(好久沒做思維題了,竟然卡了一個小時)。 除去C不看,我們發現X序列中的A只能向後移動,B只能向前移動,且可以移動任意次數。 所以假如沒有C的話,做法是這樣的:

原创 歐拉路徑 & P7771 【模板】歐拉路徑

傳送門 解題思路 直接用洛谷題解! 說的好! 怎麼求有向圖的歐拉路徑呢? 如果有起點,從起點出發,然後不斷dfs,對每個點記錄其出邊已經到了哪一條,然後當一個點的出邊都遍歷完的時候就把這條邊加入棧中。 這樣就找到了一條合法的歐拉路徑。

原创 洛谷 P3224 [HNOI2012]永無鄉(Splay合併)

傳送門 解題思路 若干平衡樹,每次操作有兩種,一是合併兩個Splay,二是查詢某一個點所在的平衡樹裏的第k小的點的編號。 首先用並查集維護某個點在哪個平衡樹裏,然後rt[i]記錄編號爲i的平衡樹的根。 每次合併時啓發式合併,直接把小的樹的

原创 洛谷 P4216 [SCOI2015]情報傳遞(樹剖,樹狀數組)

傳送門 解題思路 若強制在線,可以考慮用樹剖+主席樹,相當於每次詢問兩個點之間的路徑上在 \(i-C_i\) 時刻之前開始蒐集情報的人數。 但是這題可以離線,於是可以把詢問按照 \(i-C_i\) 離線一下,就可以用線段樹/樹狀數組來維護

原创 洛谷 P1486 [NOI2004] 鬱悶的出納員(Splay)

傳送門 解題思路 平衡樹板子題。 每次所有的數加或減可以O(1)加或減限制,然後刪除掉小於當前限制的點,統計答案。 加點時把原權值減去sum然後扔到Splay中,詢問第k大時也要把查詢的答案加上一個sum。 AC代碼 #include<i

原创 CF1436D Bandit in a City(二分,貪心)

傳送門 解題思路 先二分答案,然後做一個在樹上從葉子節點向上的貪心,讓每個葉子儘可能取滿。 當然也可以直接樹形dp,O(n)。 注意如果WA on test 5,說明爆long long了,因爲二分mid可以達到1e14,然後貪心過程中累