Submission #93992

#TimeUsernameProblemLanguageResultExecution timeMemory
93992rkocharyanJob Scheduling (CEOI12_jobs)C++14
0 / 100
71 ms888 KiB
#include <bits/stdc++.h>

using namespace std;

const int N = 1e5 + 7;

int n, d, m;
int f[N];

bool check(int t) {
    deque < pair <int, int> > h;
    for(int i = 1; i <= n; i++) {
        h.emplace_back(i, f[i]);
        if(!h.empty()) {
            h[0].second -= min(h[0].second, t);
            int cur_t = t;
            if(!h.empty() && cur_t) {
                if(i - h[0].first > d) return false;
                int next_t = cur_t;
                next_t -= min(h[0].second, cur_t);
                h[0].second -= min(h[0].second, cur_t);
                cur_t = next_t;
                if(h[0].second == 0) {
                    h.pop_back();
                }
            }
        }
    }
    if(h.size()) return false;
    return true;
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> d >> m;
    for(int i = 0; i < m; i++) {
        int x;
        cin >> x;
        f[x]++;
    }
    int low = 1, high = n, best = n;
    while(low <= high) {
        int mid = (low + high) >> 1;
        if(check(mid)) {
            best = mid;
            high = mid - 1;
        } else {
            low = mid + 1;
        }
    }
    cout << best << '\n';
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...