BZOJ 2658 小藍的好友

2021-10-02 07:49:21 字數 1290 閱讀 4303

正難則反,求至少包含乙個黑格仔就等於全部減去不包含黑格仔的方案數。

考慮單調棧,對於每一行,求出每乙個點最長上公升,不碰到黑格仔的距離,得到乙個陣列upup

up,本題的乙個重要條件是資料隨機,我們對upup

up陣列建立tre

aptreap

trea

p,其中下標作為減值,upup

up作為修正值,這樣建出來的數滿足根節點的upup

up最小,而且由於upup

up隨機,能夠保證複雜度是log

⁡\log

log。

考慮每個點的貢獻,就是在tre

aptreap

trea

p中的:(up

[x]−

up[f

a[x]

])×s

ize[

x]×(

size

[x]+

1)÷2

(up[x]-up[fa[x]])\times size[x]\times (size[x]+1)\div 2

(up[x]

−up[

fa[x

]])×

size

[x]×

(siz

e[x]

+1)÷

2,求和即可。

怎麼理解上式呢?請看下圖:

就比如這樣的一顆區域性tre

aptreap

trea

p,我們的根通過上式處理了紅色部分的貢獻,具體表現為固定y

yy軸下限,在高度差中隨意選取y

yy軸上限,左邊和右邊都在管轄範圍(upup

up一定比它大)中亂選(也就是siz

esize

size

),體現為等差數列求和,那我們每乙個高度都不重不漏的統計,那麼一直歸納到最後,就可以發現這種做法的正確性,所以當行的答案我們解決了。

將改行轉移到下一行,每乙個up+

1up+1

up+1

,如果遇到了黑色點那就清零,時間複雜度o(n

log⁡n)

o(n\log n)

o(nlogn)

沒有**,需要填坑

省選專練ZJOI2012小藍的好友

第一考慮容斥原理。然後掃瞄線掃過去,用一棵可持久化平衡樹treap維護搞。陳老師的說的很不錯。include include include include includeusing namespace std inline void read long long x while ch 0 ch 9...

如何找回微信刪除的好友?資料恢復小妙招

如何找回微信刪除的好友?資料恢復小妙招!為了能讓手機擁有充足的記憶體執行,有些人會選擇定期刪除掉好友的聊天記錄,甚至在一氣之下會刪除微信好友,若事後後悔想要恢復回來怎麼辦?卓師兄就是有後悔藥!1 利用手機檔案路徑查詢新增法 1 進入tencent micromsg 亂碼資料夾 sns資料夾 2 在資...

bzoj 3437 小P的牧場

方程不難寫出fi max j 0 i 其中w j i 表示前 i 個牧場中,在 i處建立最後乙個檢查站,在 j 處建立倒數第二個檢查站的最小化費 這裡的w可以用兩個字首和求出,s1 i b i s2 i 1 a i 1 2 a i 2 3 a i 3 i 1 a 1 那麼w l,r s2 r s 2...