#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define ll long long
#define MOD 998244353
#define mod 1000000007
#define INF 1000000000000000
#define inf 1000000000
//#define f first
//#define s second
bool check(int k,int d, vector<int>& jobs){
int n=jobs.size(),l=1,curr=jobs[1];
for(int i=1;i<n-d;i++){
for(int j=0;j<k;j++){
if(curr==0){
l++;
curr=jobs[l];
}
if(l+d<i) return false;
if(l>i) break;
curr--;
}
}
return true;
}
int bin_search(int d, vector<int>& jobs){
int l=1, r=2000000,res=-1;
while(l<=r){
int mid=l+(r-l)/2;
if(check(mid,d,jobs)){
res=mid;
r=mid-1;
}
else l=mid+1;
}
return res;
}
void solve(){
int n,d,m; cin>>n>>d>>m;
vector<int> jobs(n+1,0);
vector<vector<int>> jobsindex(n+1);
for(int i=0;i<m;i++){
int a; cin>>a;
jobs[a]++;
jobsindex[a].pb(i+1);
}
int k=bin_search(d,jobs),l=1,r=0;
cout<<k<<'\n';
for(int i=1;i<=n;i++){
for(int j=0;j<k;j++){
while(r==jobs[l] || l>n){
l++;
r=0;
}
if(l>i) break;
cout<<jobsindex[l][r]<<' ';
r++;
}
cout<<"0\n";
}
}
int main(){
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int t=1; for(int T=0;T<t;T++) solve();
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |