#include <bits/stdc++.h>
using namespace std;
#define int long long
bool check(vector<pair<int, int>>& jobs, int machine_a, int d, int n) {
int jobs_ptr=0;
for(int i=0; i<n; ++i) {
if(i>jobs[jobs_ptr].first+d) return false;
int available=machine_a;
while(available>0 && jobs_ptr<jobs.size() && jobs[jobs_ptr].first<=i) {
available--;
jobs_ptr++;
}
if(i>jobs[jobs_ptr].first+d) return false;
if(jobs_ptr==jobs.size()) return true;
}
cout << jobs_ptr;
return false;
}
int32_t main() {
int n, d, m;
cin >> n >> d >> m;
vector<pair<int, int>> jobs(m);
for(int i=0; i<m; ++i) cin >> jobs[i].first, jobs[i].first--, jobs[i].second=i;
sort(jobs.begin(), jobs.end());
int lo=1, hi=m;
int mid;
while(lo<hi) {
mid=lo+(hi-lo)/2;
if(check(jobs, mid, d, n)) {
hi=mid;
}
else {
lo=mid+1;
}
}
cout << hi << "\n";
int jobs_ptr=0;
for(int i=0; i<n; ++i) {
if(i>jobs[jobs_ptr].first+d) return false;
int available=hi;
while(available>0 && jobs_ptr<jobs.size() && jobs[jobs_ptr].first<=i) {
available--;
cout << jobs[jobs_ptr].second+1 << " ";
jobs_ptr++;
}
cout << 0 << "\n";
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |