優雅的暴力 分塊

2022-04-02 13:22:22 字數 1344 閱讀 7739

關於什麼是分塊,顧名思義,就是將區間分成一塊一塊的,這就是分塊,這是一種優雅的暴力。

我們可以將整個區間按照特定的性質分為 \(\sqrt n\) 個長度為 \(\sqrt n\) 的塊,來代表整個區間。

我們將其稱為一種資料結構,我感覺是因為它維護了一些東西。 它遵從乙個思想:小段樸素,大段維護

小段樸素,大段維護

怎麼理解, 假設我們維護區間乘法,(很顯然我們是可以用線段樹 log 的求解) ,我們對於乙個整塊 \(ql , qr\) 我們打乙個 \(lazy\) 標記,表示這個區間需要 \(\times k\) ,但是我們需要詢問的時候 \(l ,r\) 這個區間,我們取最壞的情況,就是 \(l < ql ,\text r > qr\) ,所以這個時候我們就直接把原陣列進行暴力更改 。 這就是大段維護,小段樸素,樸素就是暴力。

不一定非要按照分塊寫,有的題寫著寫著分塊調不出來了,就選擇用線段樹解決或者選擇其他 \(np\) 的東西 \(gank\) 掉了 。

**鏈結就是直接點開題目的提交記錄 , 查詢提交者 : lucky_king , 即可。

【description】 :

涉及區間加法 , 單點查詢。

【solution】

具體分塊怎麼做 : 就是開乙個 \(tag\) 來表示懶惰標記,本來我們樸素的演算法是直接列舉需要的區間:\([l ,r]\) ,記乙個 \(tag\) 則是對這個區間的整塊不列舉加了,標記一下,等到詢問的時候,看一下是否有 \(tag\) ,有的話就加上,就 \(ok\) 了。

【description】:

涉及區間加法,查詢小於 \(x\) 的元素個數 。

【solution】 :【description】:

給出乙個長為 \(n\) 的數列,以及 \(n\) 個操作,操作涉及區間加法,詢問區間內小於某個值 \(x\) 的前驅(比其小的最大元素)

【solution】:【description】:

操作涉及區間加法,區間乘法 。

【solution】【description】 :

涉及區間求和和區間開方

【solution】 :

我們發現這個很棘手,因為區間開方和區間求和顯然是無法打個標記就能行的。我們需要在區間求和的時候將該區間內的開方操作全部都開完。所以這個題,沒有什麼特別妙的解法,選擇用分塊來直接解決掉區間問題。

【description】 :

涉及單點插入,單點修改。

【solution】:

沒時間了,暫且咕了

【description】:

【solution】:【description】:

【solution】:【description】:

【solution】:

暴力分塊矩陣乘法

樸素的演算法 o 4096 64 4096 o 1e9 不用想是超時的。因為每次矩陣乘法中存在很多重複的計算。考慮將矩陣進行分塊優化。預處理出每塊的值。怎麼分塊。考慮對a矩陣的列分塊,和b矩陣的行分塊。因為p是公共的邊,且p 64 需要注意到的是 b矩陣中的取值僅有01那麼如果對b矩陣進行分塊的話。...

暴力美學 分塊

cf1017g 給定一棵樹,每次操作乙個點,如果這個點是白色就把他染黑,否則遞迴操作所有兒子。或者把乙個子樹染白。或者詢問某個點的顏色 黑白 把操作以 o n o sqrt n o n 劃分成若干段,把每段涉及到的點建一棵類似虛樹的東西,邊權是兩點之間的白點個數。修改操作在這棵樹上改,複雜度 sqr...

莫隊 優雅的暴力演算法

例題 牛客暑期訓練營 j 題意描述 輸入一串整數 n 1e5 對於每個詢問 i,j 輸出a 1 a i 以及a j a n 裡數字的種類數,詢問一共q個 n 思路分析 暴力解法,即對於每個詢問均通過遍歷尋找答案,會令複雜度高達o n 2 考慮對其進行優化。我們知道對於詢問 i,j 去掉i對結果造成的...