區間處理之分塊

2022-02-27 19:43:00 字數 631 閱讀 2726

分塊這種思路很常見,就是把乙個數列劃分成k塊,然後在塊的基礎上進行操作。

假如每塊的大小為magic,那麼長度為n的數列則一共會劃分成ceil(n/magic)塊。這樣會有一些性質:

1.原數列第i個的塊號為i/magic,是塊內的第i%magic個(不過這一條沒有用)。

2.假如i%magic==0,說明i是第i/magic塊的起點,第i/magic塊的範圍是[i/magic, (i+1)/magic)。

下面是用分塊思想對乙個長為n的數列的操作:查詢子區間的最大值和修改某個點的值。

1

const

int maxn = 50500;2

const

int magic = 10;3

intn, q;

4int

h[maxn], b[maxn];56

void

init() 11}

12}1314

int query(int l, int

r) 21

else24}

25return

ret;26}

2728

void update(int x, int

v) 36

}37 }

查詢之分塊查詢

分塊查詢又稱索引順序查詢,吸取順序查詢和折半查詢的優點 基本思想 將查詢表分為若干個子塊。塊內的元素可以無序,但塊件是有序的,即第乙個塊中的最大關鍵字小於第二塊中的所有關鍵字,依次類推。再建乙個索引表,索引表中的元素含有各塊的最大關鍵字和各塊中第乙個元素的位址,索引表按關鍵字有序排列。示意圖 查詢分...

數論基礎之分塊

i 1n n i sum n rfloor i 1n in 暴力?1.顯然可以使用o n o n o n 的做法暴力過去,但是資料大了肯定就涼了 2.如果取n 10的話 可以發現n i n in i的值分別是10,5,3,2,2,1,1,1,1,1 這些相同的數字豈不是可以使用區間長度 相同的數字來...

區間分塊系列

很好的分塊知識講解。可能涉及的幾個詞語解釋 區間 數列中連續一段的元素 區間操作 將某個區間 a,b 的所有元素進行某種改動的操作 塊 我們將數列劃分成若干個不相交的區間,每個區間稱為乙個塊 整塊 在乙個區間操作時,完整包含於區間的塊 不完整的塊 在乙個區間操作時,只有部分包含於區間的塊,即區間左右...