b_zj_插入广告(二分)

某视频网站有N个视频,每个视频时长为秒。产品经理找到你,希望你帮忙在其中插入M个广告。
一个视频里的两个广告必须间隔一段时间,当然间隔时间可以为0。
为了用户体验,他希望这个间隔时间尽可能长。为了方便实现,间隔时间是一个整数。
请你帮忙计算一下,这个间隔时间最大可以设置为多少秒呢?如果不能插入广告,则输出0。
输入
第一行有两个整数N, M(1<=N<=100000, N<M<=5000000)
第二行有N个整数,表示视频的时长(1<=<=1e9)
输出
一个整数,表示最大的间隔时间

样例输入
3 9
90 100 120
样例输出
45
说明
最长广告间隔为45秒。第一个视频时长90秒,可以在第0秒,第45秒,第90秒分别插入一个广告,总共3个广告。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pii;
const int mod=1e9+7, N=2e6+5;
int n, need, tot, a[N];

bool check(int mid) {
    int c=0;
    for (int i=0; i<n; i++) {
        if (a[i] >= mid) {
            c += ((a[i]) / mid - 1) + 2;
        } else {
            c += 1;
        }
    }
    return c >= need;
}
int main() {
    std::ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    cin>>n>>need;
    for (int i=0; i<n; i++) cin>>a[i];
    int l=1, r=INT_MAX/2, ans=0;
    while (l <= r) {
        int mid=l+r>>1;
        if (check(mid)) {
            l = mid + 1;
            ans = mid;
        } else {
            r = mid-1;
        }
    }
    cout<<ans;
    return 0;
}

https://www.nowcoder.com/discuss/607769

原文地址:https://www.cnblogs.com/wdt1/p/14509815.html