題目 教主的魔法

2021-09-26 04:24:28 字數 1116 閱讀 7028

這次竟然分到一道板題……

題目大意

給出乙個長度為n

nn的序列,每個數字一開始都是不超過1000

1000

1000

的正整數。下面進行兩種操作: n

⩽1000000

n\leqslant 1000000

n⩽1000

000,q

⩽3000

q\leqslant 3000

q⩽3000

。思路常見的區間問題中區間長度n

nn和操作次數q

qq範圍都是相當的,而本題q

qq小得有點奇怪,只相當於n

\sqrt n

n​。這暗示我們可以用分塊。

由於第二個操作涉及到大小比較,除了給出的a

aa序列外,另外維護乙個序列b

bb,保證b

bb中每一塊內的數字都是有序的。然後就可以愉快的分塊了。

區間修改

對於區間兩端不包含某個塊的部分,暴力對每個值加w

ww。加完後維護一下b

bb序列中對應塊的數字(複製後重新排序)。

對於被區間完全覆蓋的塊,用乙個add

addad

d標記記錄每一塊被整體增加的值。

時間複雜度o(n

log⁡2n

)o(\sqrt n\log_2n)

o(n​

log2​n

)。區間查詢

對於區間兩端的部分,同樣暴力列舉,記錄大於等於c

cc的數的個數,但注意要加上對應塊的add

addad

d標記。

對於被區間完全覆蓋的塊,在b

bb序列的對應塊內用lower_bound找出第乙個大於等於c−a

dd

c-add

c−ad

d的位置,然後可以據此計算出該塊內大於等於c

cc的數的個數。

時間複雜度o(n

log⁡2n

)o(\sqrt n\log_2n)

o(n​

log2​n

)。……然後就完了。注意區分數字的序號和塊的序號,以及最後乙個塊不足n

\sqrt n

n​需要特判。

教主的魔法 模擬

可以說是一些塊狀資料結構,用分塊陣列來進行乙個維護,然後對於每個被完整覆蓋的塊用乙個永久化標記來進行儲存一下,一道模板題。分塊陣列模版 include include include include include include include include include include in...

3343 教主的魔法 分塊

教主最近學會了一種神奇的魔法,能夠使人長高。於是他準備演示給xmyz資訊組每個英雄看。於是n個英雄們又一次聚集在了一起,這次他們排成了一列,被編號為1 2 n。每個人的身高一開始都是不超過1000的正整數。教主的魔法每次可以把閉區間 l,r 1 l r n 內的英雄的身高全部加上乙個整數w。雖然l ...

教主的魔法 分塊的用法

題目鏈結點這裡 題目描述 教主最近學會了一種神奇的魔法,能夠使人長高。於是他準備演示給xmyz資訊組每個英雄看。於是n個英雄們又一次聚集在了一起,這次他們排成了一列,被編號為1 2 n。每個人的身高一開始都是不超過1000的正整數。教主的魔法每次可以把閉區間 l,r 1 l r n 內的英雄的身高全...