做題記錄 P6749 Yoshino

2022-09-18 14:54:20 字數 760 閱讀 4165

乙個長度為 \(n\) 的序列,第 \(i\) 項為 \(a_i\),對數列進行 \(m\) 次操作。

\(l\ r\ x\):把數列下標在 \([l,r]\) 區間內的數賦值為了乙個從 \(x\) 開始公差為 \(1\) 的等差數列。

查詢整個數列中的逆序對個數。

\(n,m\le 3\times 10^4\)。

考慮逆序對本質。

每次賦值等差序列是不會出現逆序對的。

設當前修改的是 \([l,r]\),那麼逆序對個數

\[ans=\sum_^r(\sum_^[a_j>a_i]+\sum_^n[a_j

考慮用樹套樹去維護。

考慮對每個值點建乙個樹狀陣列,然後開個桶統計。

然後隨便做一下字首和、區間維護。

對於動態逆序對,其實可以考慮顏色段均攤的思想。

冷靜一下,珂朵莉樹的 assign 操作,那麼將區間變成點,然後暴力維護。

而每次操作除了最初的區間,每次賦值最多隻會增加 \([l,r]\) 和其左、右**部分。所以最多 \(n+3m\) 個區間。

注意每個區間只操作一次,所以均攤就是 \(o(n\omega)\),其中 \(\omega\) 是單次修改複雜度。

還記得當時開的值域桶,那麼用乙個樹狀陣列套就可以了。

至於 \(\omega\),樸素地分類計算即可。

實現時注意珂朵莉部分的操作,開三個 set 來統計當前增加區間、**的左、右區間。

總的時間複雜度 \(o(n\log^2n)\)。

KMP做題記錄

題目太長不貼了 這道題很巧妙,給定乙個字串s,求最少在首尾新增幾個字元後,s變為乙個迴圈了n次的字串 n 1 假設我們有乙個迴圈串s abcabcabc 我們根據kmp求一次next陣列,就可以通過next strlen s 得到乙個迴圈節的位置從而求出迴圈節的長度,顯然,迴圈節能被s整除。如果s ...

8 25 9 25 做題記錄

2018.8.25 上午 1.ac 洛谷p1514引水入城 搜尋 貪心 2.ac 洛谷p3918 國家集訓隊 特技飛行 貪心 下午 3.ac 洛谷p1120 小木棍 資料加強版 搜尋 剪枝 4.ac 洛谷p1441 砝碼稱重 dfs列舉 01揹包 2018.8.26 上午 參加模擬賽 下午 1.ac...

8 25 9 25 做題記錄

2018.8.25 上午 1.ac 洛谷p1514引水入城 搜尋 貪心 2.ac 洛谷p3918 國家集訓隊 特技飛行 貪心 下午 3.ac 洛谷p1120 小木棍 資料加強版 搜尋 剪枝 4.ac 洛谷p1441 砝碼稱重 dfs列舉 01揹包 2018.8.26 上午 參加模擬賽 下午 1.ac...