萌新瞎講 分塊

2021-07-31 09:37:59 字數 1098 閱讀 5826

推薦!

將規模為n的問題,分成 n−

−√塊,每塊規模也是 n−

−√,那麼對塊內的操作和整個範圍的操作的複雜度平均,可以在較優的空間複雜度下,將每次操作的複雜度降低到\sqrt ,以較低的編碼 複雜度解決問題。

initially, 我們分好了塊。

對於原序列元素a[ pos ],在哪個塊: po

s−1n

√+1 ;

so,我們可以維護哪些資訊?

原序列的每個元素 and 塊 and …

分塊思想:

先把每個元素分塊包裝,就是分塊(堆),拿乙個屬性,去代表一段區間的屬性。

這裡有兩個「加法」標記:塊的/單個元素;

當 「區間[left, right]加 + val」 的時候,

1. 如果left, right 在同乙個塊,直接暴力維護單點標記,複雜度o(n−

−√);

2. 不在同乙個塊,

對於區間[left,left所在塊的右端點]&&[right所在塊的左端點]暴力維護單點標記,複雜度o(n−

−√);

對於區間[left所在塊+1,right所在塊-1]這些塊,進行維護塊的加法標記,複雜度o(n−

−√);

對於 m 次詢問,總的複雜度:mn−

−√.**注意:

塊區間大小:s = n−

−√;

原序列元素a[ pos ]的塊位置:belong[ pos ] = po

s−1s

+1;

原序列元素a[ pos ]的塊的左端點:(belong[ pos ] - 1) * s + 1;

原序列元素a[ pos ]的塊的右端點:belong[ pos ] * s;

**具體實現:

ps: 這裡單個元素維護陣列直取代了原序元素陣列;

while(m--) //運算元

//維護塊

for(int i=bel[left]+1; i<=bel[right]-1; i++) vtag[i]+=val;

}else //查詢

}

基礎練習1、

區間加,詢問區間和。

萌新瞎講網路流之最大流 不定期更新理解篇

不定期更新篇 未成形篇 一直在搞,就像吃很惡習的東西,好想吐 但還是可以理解成良藥苦口啊 基礎知識定義 網路是一種特殊的有向圖。有向加權圖g,指定兩個定點s和t,分別稱為源和匯。邊上的權值稱為容量 網路中的乙個可行流並不是改路線中所有邊的容量的簡單相加,這段路線的總承重量受路線中最小容量邊的制約。尋...

瞎講 類歐幾里得入土教程

假設我們現在得到一條直線 y ax b 現在要數出 x in 0,n 時,在 x 正半軸和這條直線之間的整點個數,n le 10 這個方程一定可以化為這樣的形式 y dfrac 列舉 x in 0,n 直接算其整點個數,答案就是 sum n lfloor dfrac rfloor 考慮如何快速計算這...

萌新linux之旅4

管理輸入輸出 在目錄層次結構中搜尋檔案 find 在系統中用普通使用者執行 student find etc name passwd student使用者許可權被拒絕時會有以下輸出 find etc pki ca private permission denied 許可權被拒絕 find etc p...