[轉]分塊
轉自:https://www.cnblogs.com/Sdchr/p/7927411.html
分塊
設閾值 T ,把數據劃分為兩類,某一類的數據具有某種優勢,另外一類的數據又具有另外一種優勢,就可以結合利用兩種優勢,達到更優秀的復雜度。
序列分塊
1. 「TH 2517」數顏色
單點修改,區間不同數個數,強制在線。
2. 「SPOJ UNTITLE1」
n <= 5e5 ,區間增加等差數列,區間最值。
區間修改、區間查詢是一類經典問題,數據結構的做法通常是劃分為若幹個子區間,若子區間的信息能夠合並,則使用線段樹,否則分塊。
對於斜率優化的問題,建了凸殼之後,可以直接三分,不需要二分。
1. 「BZOJ 3065」帶插入區間第 K 小
塊的大小在 [c, 2c] ,從而保證復雜度。初始化,查找位置(在末尾添加一個字符),插入(分裂),刪除(合並)。
值域分塊
1. 給定一個長度為 n(1e5) 的序列 a[1], a[2], ..., a[n] .
m(1e5) 組詢問 (l, r, K) , 求區間 [l, r] 去除重復的數之後的第 K 小.
按大小分塊
1. 「2013 年國家集訓隊論文」
給 n 個字符串 ti ,支持合並,或者查詢字符串 s 中出現過多少個字符串 ti 。
2. 「2013 年國家集訓隊論文」
給 n 個區間 [li, ri] ,m 組詢問 [l, r] ,求與 [l, r] 相交的最長連續子序列的長度。
1. 「AGC 003D」Anticube
K 補數:定義,求解,平衡規劃至 $W ^ {\frac{1}{3}}$ 。
2. 「POI 2010」Divine Divisor
給 n = a1 * a2 * a3 * ... * am ,m <= 600, ai <= 1e18 。求最大的 K ,存在完全 K 次方因子,並求出此時完全 K 次方因子的個數。
類似 AGC 003D 的做法。將因子分解完之後,取最大次數即可。設 W = 1e6 ,對 W 以內的進行分解,剩下最多只能再分解兩次,有三種可能:p, pq, p^2 ,對 p^2 直接判掉,求兩兩 gcd 嘗試將 pq 進行分解,否則 pq 作為整體考慮,權重為 2 。
選擇 K 個不超過 N(500) 的正整數,乘積為無平方因子數,問選擇方案數。
圖分塊
1. 「TH 1021」邊學圖論邊染色
n 點 m 帶權邊無向圖,點權 0 和 1 ,要麽將某個點的顏色改變,要麽詢問所以 x - y 邊的邊權和。
重點擅長枚舉點、枚舉重點到重點的邊,輕點擅長枚舉邊,邊要去重。
莫隊算法
1. 帶修改莫隊
$A = \left\{ a_1, a_2, ..., a_n \right\}$ ,單點修改,詢問區間不同數個數。
2. 樹上莫隊
入棧出棧序的性質:
1. 當 x 是 y 的祖先時,$\Delta [in(x), in(y)] = path(x, y)$
2. 當 x 和 y 沒有祖先關系,$out(x) < in(y)$ 時,設 $z = LCA(x, y)$ ,則 $\Delta [out(x), in(y)] = path(x, y) \cup \left\{ z \right\}$
莫隊維護對稱差。
3. 可撤銷莫隊
「BZOJ 4358」permu:求區間最長值域連續段。
定期重構
1. 朝鮮樹,帶插入的 Kd-tree 。
Sdchr
天上下,我獨尊,觀自在,守本心。
隨筆 - 17 文章 - 0 評論 - 2天上下,我獨尊,觀自在,守本心。
隨筆 - 17 文章 - 0 評論 - 2分塊
1. 「TH 2517」數顏色
單點修改,區間不同數個數,強制在線。
2. 「SPOJ UNTITLE1」
n <= 5e5 ,區間增加等差數列,區間最值。
區間修改、區間查詢是一類經典問題,數據結構的做法通常是劃分為若幹個子區間,若子區間的信息能夠合並,則使用線段樹,否則三分,不需要二分。
塊狀鏈表
1. 「BZOJ 3065」帶插入區間第 K 小
塊的分塊
1. 給定一個長度為 n(1e5) 的序列 a[1], a[2], ..., a[n] .
m(1e5) 組詢問 (l, r, K) , 求區間 [l, r] 去除重復的數之後的第 K 小.
按分塊
1. 「2013 年國家集訓隊論文」
給 n 個字符串 ti ,支持合並,或者查詢字符串 s 中出現過多少個字符串 ti 。
2. 「2013 年國家集訓隊論文」
給 n 個區間 [li, ri] ,m 組詢問 [l, r] ,求與 [l, r] 相交的最長連續子序列的長度。
按質因子分塊
1. 「AGC 003D」Anticube
K 補數:定義,求解,平衡規劃至 $W ^ {\frac{1}{3}}$ 。
2. 「POI 2010」Divine Divisor
給 n = a1 * a2 * a3 * ... * am ,m <= 600, ai <= 1e18 。求最大的 K ,存在完全 K 次方因子,並求出此時完全 K 次方因子的個數。
類似 AGC 003D 的做法。將因子分解完之後,取最大次數即可。設 W = 1e6 ,對 W 以內的進行分解,剩下最多只能再分解兩次,有三種可能:p, pq, p^2 ,對 p^2 直接判掉,求兩兩 gcd 嘗試將 pq 進行分解,否則 pq 作為整體考慮,權重為 2 。
3. 「TH 2603」乘積
選擇 K 個不超過 N(500) 的正整數,乘積為無平方因子數,問選擇方案數。
圖分塊
1. 「TH 1021」邊學圖論邊染色
n 點 m 帶權邊無向圖,點權 0 和 1 ,要麽將某個點的顏色改變,要麽詢問所以 x - y 邊的邊權和。
重點擅長枚舉點、枚舉重點到重點的邊,輕點擅長枚舉邊,邊要去重。
莫隊算法
1. 帶修改莫隊
$A = \left\{ a_1, a_2, ..., a_n \right\}$ ,單點修改,詢問區間不同數個數。
2. 樹上莫隊
入棧出棧序的性質:
1. 當 x 是 y 的祖先時,$\Delta [in(x), in(y)] = path(x, y)$
2. 當 x 和 y 沒有祖先關系,$out(x) < in(y)$ 時,設 $z = LCA(x, y)$ ,則 $\Delta [out(x), in(y)] = path(x, y) \cup \left\{ z \right\}$
莫隊維護對稱差。
3. 可撤銷莫隊
「BZOJ 4358」permu:求區間最長值域連續段。
定期重構
1. 朝鮮樹,帶插入的 Kd-tree 。
posted @ 2017-11-30 10:05 Sdchr 閱讀(...) 評論(...) 編輯 收藏 刷新評論刷新頁面返回頂部 Copyright ©2018 Sdchr[轉]分塊