目标是最大化「补强后的最小值」,对这个最小值做二分,再判断 T 次施工是否够用。
养护队要给一条分成 L 段的护栏做补强。第 i 段当前高度为 hi。手册规定:最多可以施工 T 次;每一次必须选一段连续护栏 [p,q],且长度不超过 W,也就是
1≤p≤q≤L,q−p+1≤W.选中后,该区间内每一段高度都加 1。队里希望补强后「最矮的那段」尽量高。请计算:在不超过 T 次施工时,整条护栏高度最小值能够达到的最大值。
约束写在输入里:段数、次数、窗口与高度都不超过 1000000000。第二行会给出 L 个高度。
第一行三个整数 L、T、W,分别表示护栏段数、最多施工次数、单次最多覆盖的连续段数。
第二行 L 个整数 h1,h2,…,hL,表示各段初始高度。
其中 1≤L,W≤1000000000,0≤T,hi≤1000000000。
输出一个整数,表示补强后高度最小值的最大可能值。
输入
4 2 2
3 1 1 3
输出
3
说明
两次施工都盖在中间两段 [2,3],高度变成 3,3,3,3,最小值为 3。再抬高做不到。
输入
1 10 1
5
输出
15
说明
只有一段,十次施工都加在它上面,高度为 5+10=15。
输入
3 0 2
4 2 8
输出
2
说明
不能施工,最小值仍是 2。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册