推薦!
將規模為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...