Submission #987413

#TimeUsernameProblemLanguageResultExecution timeMemory
987413OAleksaJob Scheduling (CEOI12_jobs)C++14
0 / 100
231 ms42168 KiB
#include <bits/stdc++.h>
#define f first
#define s second
using namespace std;
const int N = 1e6 + 69;
int n, d, m, a[N], b[N];
vector<int> g[N];
signed main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int tt = 1;
  //cin >> tt;
  while (tt--) {
  	cin >> n >> d >> m;
  	vector<int> c;
  	c.push_back(0);
  	for (int i = 1;i <= m;i++) {
  		cin >> a[i];
  		g[a[i]].push_back(i);
  		c.push_back(a[i]);
  	}
  	sort(c.begin(), c.end());
  	int l = 1, r = m, ans = 0;
  	auto check = [&](int mid) {
  		int t = 0;
  		for (int i = 1;i <= m;i++) 
  			b[i] = (i + mid - 1) / mid;
  		for (int i = 1;i <= m;i++) {
  			t += 1;
  			if (t > mid) {
  				b[i] = b[i - 1] + 1;
  				t = 1;
  			}	
  			if (b[i] < c[i]) {
  				b[i] = c[i];
  				t = 1;
  			}
  		}
  		for (int i = 1;i <= m;i++) {
  			if (c[i] + d < b[i])
  				return false;
  		}
  		return true;
  	};
  	while (l <= r) {
  		int mid = (l + r) / 2;
  		if (check(mid)) {
  			ans = mid;
  			r = mid - 1;
  		}
  		else 
  			l = mid + 1;
  	}
  	cout << ans << '\n';
  }
  return 0; 
}
#Verdict Execution timeMemoryGrader output
Fetching results...