BZOJ十連測 線段樹

2021-10-02 08:41:19 字數 689 閱讀 6684

在若干次操作後,某乙個位置的值可以表示成若干各區間的最大值。

例如位置k

kk,我們找到當前操作前最後乙個(編號最大但小於當前編號)覆蓋當前區間左端點的操作的左端點,最後乙個覆蓋當前當前區間右端點的操作的右端點,把這個左右端點當成乙個新的操作區間,然後重複執行上述操作。

也就是我們需要一直向左找,一直向右找,找到最左的和最右的ll,

rrll,rr

ll,rr,k

kk位置上面的即是[ll

,rr]

[ll,rr]

[ll,rr

]這個區間中的最大值。

我們可以把上述操作建成圖,分別建成左樹和右樹,把操作區間當作節點,左樹的父節點即為最後覆蓋當前操作區間左端點的操作區間,右樹同理,我們可以在這顆樹上倍增,就可以快速找到llll

ll和r rrr

rr。具體來說,我們按順序掃瞄操作區間,維護一顆線段樹,區間修改,單點查詢即可。

建出這兩棵樹之後,查詢和修改就不成問題了,用線段樹維護區間最小值,查詢即可,時間複雜度o(n

log⁡n)

o(n\log n)

o(nlogn)

咕咕咕

bzoj十連測第二場 A 深邃

一棵樹每個節點有顏色。請將樹分成若干連通塊,使每個連通塊均包含黑點。最小化最大的連通塊的大小。看到雙最直接二分。二分了乙個k,接下來怎麼判定?設f i 表示以i為根的情況 1 f i 為正數,表示以i為根的子樹內除了i所在連通塊均合法,i所在連通塊包含黑點時i所處連通塊大小的最小值。2 f i 為負...

bzoj十連測第三場 A 哈夫曼樹

和的期望 期望的和。因此計算每個節點期望貢獻再加起來即可。乙個結點的期望深度與其數值大小和所在陣列位置無關,因此可以一視同仁。假設還有i顆子樹,我們顯然知道乙個結點肯定處於一顆子樹內。只有在該輪其所在子樹被合併時深度才會加一,所以貢獻為被合併的概率 1。被合併的概率是i 1c2i 2i 所以答案就是...

BFS BZOJ省選十連測 Cycle

蛤?這題絕對有問題。複雜度明顯不對頭。它的想法其實就是找到乙個點,判斷它與它周圍的點能否構成環,然後不能再刪去這個點。然而。他每次都memset了一發,這不t?服都服了。include include include include define sf scanf define pf printf ...