#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 s=0,n=jobs.size();
for(int i=1;i<n;i++){
s+=jobs[i];
if(s%k){
if(s/k+1>i+d) return false;
}
else{
if(s/k>i+d) return false;
}
}
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),jobssorted;
vector<vector<int>> jobsindex(n+1);
for(int i=0;i<m;i++){
int a; cin>>a;
jobs[a]++;
jobsindex[a].pb(i+1);
}
for(int i=1;i<=n;i++) for(auto&u:jobsindex[i]) jobssorted.pb(u);
int k=bin_search(d,jobs);
cout<<k<<'\n';
for(int i=0;i<n;i++){
for(int j=1;j<=k;j++){
if(i*k+j>m){
break;
}
cout<<jobssorted[i*k+j-1]<<' ';
}
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... |