JOISC2017 门票安排

肯定先考虑二分答案,判定能不能全部不超过 \(w\)

钦定不走 \(n\rightarrow1\) 的边,接着翻转若干区间。

翻转一个区间的变化是 \([1,l)++,[l,r)--,[r,n]++\)

注意到翻转两个不交的区间一定不优,所以所有被翻转的区间交非空。

令交为 \([x,y]\),边初始被覆盖 \(a_i\) 次,翻转后覆盖 \(b_i\) 次,\(b_t\)\([x,y]\)\(b\) 的最大值。

观察到 \(b_t\)\(\max b_i\) 应该是差不多大的,具体来说是:\(b_t\ge\max b_i-1\)。否则可以同时取消翻转一个 \(l=x\)\(r=y\) 的区间,答案不会更劣。

于是有 \(\max a_i=a_t\),因为 \([x,y]\)\(a_t\) 肯定是最大的,而其它地方少翻转若干次,却最多大 \(1\)

确定了 \(a_t\)\(w\),可以算出被翻转的区间个数 \(a_t-w\)\(a_t-w+1\)。显然钦定了仍满足可二分性。

那么只需要从 \(1\)\(t\) 扫过去,算出每个位置至少被覆盖多少次,然后尽量选 \(r\) 最大的,用大根堆维护即可。

代码:https://loj.ac/s/1707619

posted @ 2023-02-22 19:10  shrtcl  阅读(28)  评论(0编辑  收藏  举报