萌新二分答案 80pts 求调
查看原帖
萌新二分答案 80pts 求调
643058
T1EM1E楼主2024/10/6 22:41
#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<vector>
#include<cstdio>
#include<string>
#include<iomanip>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define INF 0x3f3f3f3f
#define eps 1e-8
#define ll long long
#define ull unsigned long long
#define bug(x) cerr<<"[Debug] "<<#x<<"="<<(x)<<endl
#define el putchar('\n')
#define sp putchar(' ')
using namespace std;
int read() {
    int s=0,w=1;
    char ch=getchar();
    while(ch<'0' || ch>'9'){if(ch=='-')w=-1;ch=getchar();}
    while(ch>='0' && ch<='9') s=s*10+ch-'0',ch=getchar();
    return s*w;
}
void write(int x) {
    if(x<0) putchar('-'),x=-x;
    if(x>9) write(x/10);
    putchar(x%10+'0');
    return;
}
const int N = 1e4 + 10;
int MAXN = 1e6;
int n, t, a[N];
bool check(int k) {
    priority_queue<int, vector<int>, greater<int> > q;
    int cnt = 1;
    for (int time = 0; time <= t; time++) {
        if (q.empty() && cnt == n) return 1;
        while (q.size() < k) {
            if (cnt < n) q.push(a[cnt++] + time);
            else break;
        }
        while (!q.empty() && q.top() <= time) {
            q.pop();
        }
    }
    if (cnt == n && q.empty()) return 1;
    return 0;
}
int main() {
    n = read(); t = read();
    for (int i = 1; i <= n; i++) {
        a[i] = read();
    }
    int l = 0, r = MAXN, mid;
    while (l < r) {
        mid = (l + r) >> 1;
        // bug(l);bug(r);
        if (check(mid)) r = mid;
        else l = mid + 1;
    }
    cout << l << endl;
    return 0;
}
2024/10/6 22:41
加载中...