Submission #416425

#TimeUsernameProblemLanguageResultExecution timeMemory
416425shubham20_03Job Scheduling (CEOI12_jobs)C++17
15 / 100
329 ms26860 KiB
#include <bits/stdc++.h>
using namespace std;
#define FAST ios_base::sync_with_stdio(false); cin.tie(NULL)
#define int long long
#define deb1(x) cout << #x << "=" << x << endl;
#define deb2(x, y) cout << #x << "=" << x << ", " << #y << "=" << y << endl;
#define ff first
#define ss second
#define pb push_back

int N, D, M;
pair<int, int> a[1000300];
vector<int> ans_dur;

bool ok(int m) {
	int cm = 0, cd = 1;
	ans_dur.clear();

	for (int i = 1; i <= M; i++) {
		if (cm < m) {
			if (a[i].ff > cd) {
				cm = 1, cd = a[i].ff;
				ans_dur.pb(0); ans_dur.pb(a[i].ss);
			}
			else {
				cm++;
				ans_dur.pb(a[i].ss);
				if (cd - a[i].ff > D)
					return 0;
			}
		}
		else {
			cm = 1, cd++;
			ans_dur.pb(0); ans_dur.pb(a[i].ss);
			if (cd - a[i].ff > D)
				return 0;
		}
		if (cd > N) return 0;
	}

	ans_dur.pb(0);
	return 1;
}

void show() {
	for (int x : ans_dur) {
		if (x == 0) cout << "0\n";
		else cout << x << " ";
	}
}

signed main() {
	FAST;

	cin >> N >> D >> M;
	for (int i = 1; i <= M; i++) {
		cin >> a[i].ff;
		a[i].ss = i;
	}
	sort(a + 1, a + 1 + M);

	int l = 1, r = M, ans = M;
	while (l <= r) {
		int m = l + (r - l) / 2;
		if (ok(m)) ans = m, r = m - 1;
		else l = m + 1;
	}
	cout << ans << "\n";
	show();
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...