正難則反,求至少包含乙個黑格仔就等於全部減去不包含黑格仔的方案數。
考慮單調棧,對於每一行,求出每乙個點最長上公升,不碰到黑格仔的距離,得到乙個陣列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
logn)
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...