leetcode2528 最大化城市的最小电量
给定数组st[n],其中st[i]表示第i座城市的供电数目,每个供电站的供电范围是r,一座城市的电量是所有能给它供电的供电站数目之和,现在还可建k座发电站,求所有城市中最小电量的最大值。
1<=n<=1e5; 0<=st[i]<=1e5; 0<=r<n; 0<=k<=1e9
最大化最小值,或者最小化最大值,常用的方法是二分答案。在check时,用差分来快速实现区间更新,另外如果某个点不满足条件,则在新建时要尽量靠右放。
class Solution { public: long long a[100005], b[100005]; long long maxPower(vector<int>& st, int r, int k) { int n = st.size(); for (int i = 0; i < n; i++) { int L = max(0, i-r); int R = min(n-1, i+r); a[L] += st[i]; a[R+1] -= st[i]; } auto check = [&](long long x) { long long cnt = 0; for (int i = 0; i <= n; i++) { b[i] = a[i]; } long long cur = 0; for (int i = 0; i < n; i++) { cur += b[i]; if (cur < x) { cnt += x - cur; if (cnt > k) { return false; } int L = i; int R = min(n-1, i+2*r); b[L] += x-cur; b[R+1] -= x-cur; cur = x; } } return cnt <= k; }; long long lo = -1, hi = 1e16, mid; while (lo + 1 < hi) { mid = (lo + hi) / 2; if (check(mid)) { lo = mid; } else { hi = mid; } } return lo; } };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】