Submission #439951

#TimeUsernameProblemLanguageResultExecution timeMemory
439951a11155Job Scheduling (CEOI12_jobs)C++14
0 / 100
250 ms3908 KiB
#include<iostream>
#include<vector>
#include<queue>
#include<fstream>
#include<algorithm>
#include<limits.h>
#include<stack>
using namespace std;
#define ll long long

const long long mod = 1000000007;


ll n, d, m;
vector<ll> arr;
vector<ll> need;

bool ok(ll mid) {
	ll done = 0; ll left = 0;
	for (int i = 0; i < n; i++) {
		done += min(mid, arr[i] + left);
		if (mid < arr[i]) left += arr[i] - mid;
		
		done -= need[i];
		//cout << i << ' ' << done << '\n';
		if (done < 0) {
			return false;
		}
	}
	return true;
}
int main() {
	cin >> n >> d >> m;
	arr.resize(n); need.resize(n);
	for (int i = 0; i < m; i++) {
		int x; cin >> x; x--;
		arr[x]++;
		need[x + d]++;
	}

	ll l = 0; ll r = 1e18;
	ll ans = 0;
	while (l <= r) {
		ll mid = (l + r) / 2;

		if (ok(mid)) {
			ans = mid;
			r = mid - 1;
		}
		else l = mid + 1;
	}

	cout << ans;

	
}





#Verdict Execution timeMemoryGrader output
Fetching results...