LY1168 [ 20230325 CQYC省選模擬賽 T3 ] 遊戲

cxqghzj發表於2024-03-15

題意

給定 \(n\) 個區間 \(l_i, r_i, k_i\)

\(k_i\) 表示解鎖當前點當且僅當 \(l_i \to r_i\) 的區間內至少有 \(k_i\) 個點被解鎖。

問一共能解鎖多少點。

Sol

直接暴力跑是 \(n ^ 2\) 的。

不難想到最佳化建圖,複雜度:\(O(nk \log)\)

這樣明顯是過不去的。

集中注意力。

注意到操作一次最多讓一個區間被解鎖。

換句話說,假設當前操作次數為 \(x\),那麼只有當 \(k_i \le x\) 的區間,才會有可能被解鎖。

所以接下來的事情就很簡單啦,考慮定期重構線段樹。

每次將 \(k_i \le B\) 的區間加入線段樹。

暴力對於每一個點操作即可。

注意在重構時要先清空佇列保證複雜度。

複雜度:\(O(n \sqrt n \log n)\)

相關文章