1. 程式人生 > 其它 >做題記錄 2

做題記錄 2

做題記錄2

10.9 牛客模擬 A

結論題。注意到和不變,而C的變化相當於每次*2後再%sum。

所以直接輸出 \(C*(2^k) mod \ sum\) 就可以了。


10.9 牛客模擬B

首先先處理出到達一點 x 的所有路徑中邊權最大值的最小值,這點即可以最小生成樹也可以直接spfa跑。

也就是說每一個點中的那個種類的妹子只要當前的困難接受程度 \(\geq\) 這個值,就可以獲得,而如果有更小的同種類妹子,當前的顯然無用。

於是給每一個種類的最小值打上標記,然後每次用一個動態開點線段樹統計就可以了。

細節:每次先統計 \([0,l-1]\) 再統計 \([l,r]\) 兩者統計方法不同(因為對整個答案的貢獻是不同的,前者每一個標記貢獻(\(r-l+1\)

),後者每一個標記貢獻是 \(r-loc+1\) ,loc 指 標記所在位置)。線段樹上維護一個cnt和sum就可以了。


10.9 牛客模擬C

對於一個點 x ,假設他的覆蓋時間為 t

那麼他覆蓋到他的一個祖先 y 所用時間就是 t+dep[x]-dep[y],

而當前查詢節點 z 與 x的lca 是 y的,且查詢時間為 now 的話。

那麼一定 now >= t+dep[x]-dep[y]+dep[z]-dep[y]

移項一下:now-dep[z]>=t+dep[x]-2*dep[y]

顯然左柿子是一個給定的值,只需要維護從 z 向上的所有 \(t+dep[x]-2*dep[y]\)

的最小值就好了。

修改也只向上修改,因為每次只會修改一條連續的鏈,所以最小值一定只在整個區間的 r 處取得,(因為 r 處的 dep 最大)

清空給整個線段樹打一個覆蓋標記就好了。


10.9 牛客模擬D

首先考慮菊花圖的情況:那肯定就是一個類似於基於交換的貪心,只需要滿足 \(b_i*h_{i+1}>h_i*b_{i+1}\) 就可以了。