#include<bits/stdc++.h>
using namespace std;
int days, delay, requests, ans, request_dates[1000005];
map<int,vector<int> > requests_per_day;
bool check(int machines){
priority_queue<int, vector<int>, greater<int> > pq;
for(int i=1; i<=days; i++){
if(requests_per_day.find(i)!=requests_per_day.end()) for(auto j : requests_per_day[i]) pq.push(i);
int stuff = 0;
while(!pq.empty()&&stuff<machines){
int z = pq.top();
if(i-z>delay) return false;
pq.pop();
stuff++;
}
}
return pq.empty();
}
int main(){
cin.tie(0)->sync_with_stdio(0);
cin >> days >> delay >> requests;
for(int i=1; i<=requests; i++){
cin >> request_dates[i];
requests_per_day[request_dates[i]].push_back(i);
}
int lo = 1, hi = requests;
while(lo<=hi){
int mid = (lo+hi)/2;
if(check(mid)){
ans = mid;
hi = mid-1;
}else lo = mid+1;
}
cout << ans << '\n';
priority_queue<pair<int,int>, vector<pair<int,int> >, greater<pair<int,int> > > pq;
for(int i=1; i<=days; i++){
if(requests_per_day.find(i)!=requests_per_day.end()) for(auto j : requests_per_day[i]) pq.push(make_pair(i,j));
int stuff = 0;
while(!pq.empty()&&stuff<ans){
int z = pq.top().second;
cout << z << ' ';
pq.pop();
stuff++;
}
cout << "0\n";
}
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |