筆記 根號演算法

2022-03-30 06:42:57 字數 1776 閱讀 2592

張隊藥學根號演算法。。也不知怎樣勾起了我的興趣。。。

借鑑了 *miracle* 的思想

根號演算法是一種很常見的演算法

常見的根號思想有:雙向搜尋、根號分類討論、根號重建、複雜度平衡,以及一些根號級別的資料結構如分塊和莫隊

這些演算法一般是多種暴力演算法的結合,一般具有較低的思維難度和編碼難度

——immortalco貓

(下面兩道題都是跟圖論有關的)

好像這個也算

(from the_death的課件)

當時說隨機資料是 \(n\sqrt n\) 的,現在想想好像也可以做到穩定 \(n\sqrt n\)。

我們按點的度數對點分類,若點 \(u\) 的度數 \(d[u]>\sqrt n\) ,稱為大點;反之稱為小點。

我們預處理出與每個點相連的大點的集合 \(s(u)\) ,顯然 \(\forall u,|s(u)|<=\sqrt n\)

然後對於每個點維護兩部分答案:一部分是與每個點相連的小點的答案,另一部分我們暴力統計 \(v\in s(u)\) ,每個 \(v\) 的狀態。

修改時,如果 \(u\) 是乙個小點,我們修改與他相連的所有點即可;如果他是乙個大點,我們只修改他的狀態即可。

詳見原部落格

當 \(x>\sqrt n\) 時,倍數只有 \(\sqrt n\) 種。

當 \(x\leq \sqrt n\) 時,模意義下不同的數只有 \(\sqrt n\) 種。

每個街燈上都有乙個數,每次詢問,第 \(l\) 個街燈到第 \(r\) 個街燈上的數模 \(p\) 等於 \(v\) 的有幾個。

\(1≤n,m≤10^5\) ,街燈上的數不超過 \(10^4\) , \(1≤p≤10^9\)。

對於每個詢問,我們根據 \(p\) 的大小分類討論。

考慮如何平衡修改與查詢的複雜度,我們可以每次花 \(o(100)\) 處理出乙個數對 \(p\leq 100\)時的答案,查詢時直接使用答案。

當 \(p > 100\) ,他的倍數很少,我們可以直接查 \(k*p+v\) 出現了幾次(之前開個桶)。

給你乙個集合,邊往裡面插數,邊查詢集合中大於某個數 \(x\) 的數的數量。

三種資料範圍:

1.插入較多 \(5e7\) ,查詢較少 \(1e5\)。

2.插入中等 \(1e6\) ,查詢中等 \(1e6\)。

3.插入較少 \(1e5\) ,查詢較多 \(5e7\)。

值域 \(1e6\)

我們對於 2 ,直接樹狀陣列即可qwq。

我們對於 1 3 ,可以分塊。

我們都是維護塊內字首和,然後在維護乙個塊間字首和。

對於 1 ,我們可以 \(o(1)\) 插入,修改所屬塊和對應的桶即可, \(o(\sqrt n)\)查詢。

對於 3 , 我們可以 \(o(\sqrt n)\) 插入,修改所屬塊,對應的桶,並計算字首和,\(o(1)\) 查詢。

我們定義 \(f[a][b]\) 為 二進位制表示下 前8位位\(a\) 的子集,後8位為 \(b\) 的數的個數。

新增時列舉超集,查詢時列舉子集。

2019.11.20 coming back

根號演算法 分塊

分塊演算法實質上是一種是通過分成多塊後在每塊上打標記以實現快速區間修改,區間查詢的一種演算法。其均攤時間複雜度為 o sqrt n 分塊的基本思想是通過適當的劃分,預處理一部分資訊並儲存下來,用空間換取時間,達到時空平衡。事實上,分塊更接近於 樸素 效率往往比不上樹狀陣列和線段樹,但是它更加通用 容...

手動開根號

手動開根號步驟如下 1.對235.7進行開根號,首先以小數點部分進行數字分組,每兩位為一組,分成02 35 70 2.對每組進行試商,對第一組02試商 1 為1,得到餘數 1 為1 3.將第二組35寫在餘數後面得到135,然後用試商 1 乘20,在對135進行試商,得到試商 2 為5,將試商 1 乘...

孤獨的根號三

我害怕,我會永遠是那孤獨的根號三。三本身是乙個多麼美妙的數字,我的這個三,為何躲在那難看的根號下。我多麼希望自己是乙個九,因為九隻需要一點點小小的運算,便可擺脫這殘酷的厄運。我知道自己很難再看到我的太陽,就像這無休無止的,1.7321 我不願我的人生如此可悲。直到那一天,我看到了,另乙個根號三。如此...