#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main() {
int n,d,m;
cin>>n>>d>>m;
vector<int> v(n+1);
vector<vector<int>> idx(n+1);
vector<int> ct_idx(n+1);
for(int i=1;i<=m;i++)
{
int start;
cin>>start;
v[start+d]++;
idx[start+d].push_back(i);
}
int ans=1;
vector<vector<int>> result(n+1);
for(int i=1;i<=n;i++)
{
int in_use = v[i];
// i is the deadline day. v[i]->number of tasks on the day of deadline
if(v[i]>0)
{
if(ans < v[i])
{
ans = v[i];
}
else v[i]=0;
for(int j=ct_idx[i];j<idx[i].size();j++)
result[i].push_back(idx[i][j]);
}
int available = ans - in_use, j=i+1;
//cout<<available<<"\n\n\n";
while(available > 0 && j<=n && j-i<=d)
{
int temp = min(available, v[j]), k;
v[j] -= temp;
available -= temp;
for(k=ct_idx[j];k<min(temp+ct_idx[j], (int)idx[j].size());k++)
result[i].push_back(idx[j][k]);
ct_idx[j] = k;
j++;
}
}
cout<<ans<<'\n';
for(int i=1;i<=n;i++)
{
for(int j=0;j<result[i].size();j++)
cout<<result[i][j]<<" ";
cout<<"0\n";
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |