關於什麼是分塊,顧名思義,就是將區間分成一塊一塊的,這就是分塊,這是一種優雅的暴力。
我們可以將整個區間按照特定的性質分為 \(\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對結果造成的...