二分答案60分求调
查看原帖
二分答案60分求调
531997
dengzengxiao楼主2023/6/14 14:55

代码如下:

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n, a[100005];
bool check(int x) {
    int minl = 1e15, len = 1;
    for(int i = 2; i <= n; ++i) {
        if(a[i - 1] != a[i] - 1 || a[i - 1] == a[i]) {
            minl = min(minl, len);
            len = 1;
        } else len++;
    }
    minl = min(minl, len);
    return minl >= x;
}
int BinaryMax(int l, int r) {
    while(l <= r) {
        int mid = (l + r) >> 1;
        if(check(mid) == true) l = mid + 1;
        else r = mid - 1;
    }
    return r;
}
signed main() {
    cin >> n;
    for(int i = 1; i <= n; ++i) cin >> a[i];
    sort(a + 1, a + n + 1);
    cout << BinaryMax(0, n) << endl;
    return 0;
}

记录: https://www.luogu.com.cn/record/112678378

2023/6/14 14:55
加载中...