#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define int long long
#define pii pair<ll, ll>
#define fi first
#define se second
const ll N = 2e5 + 5, inf = 1e18, mod = 1e9 + 7, block = 320, lim = 1 << 16;
int n,d,m;
vector<pii> jobs;
vector<int> days[N];
priority_queue<pii,vector<pii>,greater<pii>> pq;
bool check(int mid)
{
for(int i=1;i<=n;i++) days[i].clear();
while(!pq.empty()) pq.pop();
int idx=0;
for(int i=1;i<=n;i++)
{
while(idx<m && jobs[idx].fi<=i)
{
pq.push(make_pair(jobs[idx].fi + d,jobs[idx].se));
idx++;
}
int cap=mid;
while(cap>0 && !pq.empty())
{
pii cur=pq.top(); pq.pop();
if(cur.fi < i) return false;
days[i].push_back(cur.se);
cap--;
}
}
return pq.empty();
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin>>n>>d>>m;
for(int i=1;i<=m;i++)
{
int s; cin>>s;
jobs.push_back(make_pair(s,i));
}
sort(jobs.begin(),jobs.end());
int l=1, r=m, ans=m;
while(l<=r)
{
int mid=(l+r)/2;
if(check(mid))
{
ans=mid;
r=mid-1;
}
else
{
l=mid+1;
}
}
check(ans);
cout<<ans<<"\n";
for(int i=1;i<=n;i++)
{
for(int id:days[i]) cout<<id<<" ";
cout<<"0\n";
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |