首页 > 其他分享 >lc2528 最大化城市的最小电量

lc2528 最大化城市的最小电量

时间:2024-03-23 14:00:13浏览次数:26  
标签:最大化 cur lc2528 long st int 电量

给定数组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;
    }
};

标签:最大化,cur,lc2528,long,st,int,电量
From: https://www.cnblogs.com/chenfy27/p/18091047

相关文章

  • 最大化运输问题求解——Python实现
    运输问题(TransportationProblem)是运筹学中的经典问题,通常涉及将资源从供应点转移到需求点,以最小化运输成本或满足需求。这个问题在各种实际场景中都有广泛的应用,包括但不限于以下几个方面:供应链管理:在供应链中,最小化运输问题可用于确定最有效的货物运输方式,以满足各个节点之间的......
  • java数据结构与算法刷题-----LeetCode1005. K 次取反后最大化的数组和(这就不是简单题)
    java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846卷来卷去,把简单题都卷成中等题了文章目录1.排序后从小到大取负2.hash表从小到大排序,省掉排序(这就是为什......
  • POJ--3258 River Hopscotch(二分搜索/最大化最小值)
    记录10:232023-3-11http://poj.org/problem?id=3259二分法查找最大的可能解,检查x是否符合条件(当前这个位置上的值-前上一个选取位置的值>=x)注意的点:使用了[begin,end)的左闭右开区间,所以结果要begin-1,end要从L+1开始算点击查看代码intL,N,M;introcks[5......
  • 1005. K 次取反后最大化的数组和c
    intlargestSumAfterKNegations(int*nums,intnumsSize,intk){intt[201]={0};intsum=0;for(inti=0;i<numsSize;i++){t[100+nums[i]]++;sum+=nums[i];}while(k>0){for(inti=0;i<201;i++){......
  • (33/60)K次取反后最大化的数组和、加油站、分发糖果
    K次取反后最大化的数组和leetcode:1005.K次取反后最大化的数组和贪心法思路两次贪心:(每次取反k--)排序,一次遍历,按绝对值从大到小地把负数取反。如果K次取反没用完,再排序一次,反复取反最小元素。(或者一开始就按绝对值从大到小排序,只需排序一次)复杂度分析时间复杂度:O(Nlo......
  • 代码随想录算法训练营第三十三天 | 135. 分发糖果, 134. 加油站, 1005.K次取反后最大化
      1005.K次取反后最大化的数组和 已解答简单 相关标签相关企业 给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。重复这个过程恰好 k 次。可以多次选择同一个下......
  • 代码随想录算法训练营第三十三天| ● 1005.K次取反后最大化的数组和 ● 134. 加油站
    K次取反后最大化的数组和 题目链接:1005.K次取反后最大化的数组和-力扣(LeetCode)思路:首先增序排序,然后依次将负值取反,如果负数先用完,则再排序一次,将最小的正数取反之后求和;如果k先用完,直接求和。注意sort默认是增序排序,若想要要降序,则不能使用sort(nums.end(),nums.begin())......
  • 解决华为手机电量60%问题
    升级鸿蒙OS后遇到手机充到60%电量后自动断电解决方案这个一般来自于手机管家我们把手机管家卸载更新关闭智能维护并且退出随后强制停止和禁用更新补电方式进入拨号界面,输入##2846579##,进入工程菜单;选择第六项补电,进入补电页面(电量高于60%就会显示补电完成);在电量......
  • 现货黄金交易:如何利用杠杆,最大化投资回报?
    黄金一直以来都是投资者们青睐的避险资产,而现货黄金交易则是让投资者有机会参与到黄金市场波动中获取收益的方式之一。而在现货黄金交易中,利用杠杆可以帮助投资者在有限的资本下最大化投资回报。首先,了解杠杆交易的基本概念是至关重要的。杠杆交易是指借用资金来进行投资,以提高投......
  • 代码随想录 day34 K 次取反后最大化的数组和 加油站 分发糖果
    K次取反后最大化的数组和按照元素的绝对值大小进行排序把绝对值大的且小于0的取反如果还能取反那么奇数次的话就把绝对值小的取反偶数次不用管加油站首先如果总油量小于总消耗是一定不能跑完的这里的思路是如果[0,i]区间不能油量小于消耗那么就尝试从下一个i+1......