#include <bits/stdc++.h>
using namespace std;
int main(){
int n,m,d;
cin>>n>>d>>m;
vector<int>cnt(n+1),cnt2(n+1);
vector<pair<int,int>>xd(m);
for(int i=0;i<m;i++){
int x;
cin>>x;
cnt[x]++;
cnt2[x]++;
xd[i]={x,i+1};
}
sort(xd.begin(),xd.end());
int lewo=1,prawo=m+1;
while(lewo<=prawo){
int mid=lewo+((prawo-lewo)/2);
int akt=1;
bool flaga=true;
int przew=mid;
for(int i=0;i<=n;i++){
if(cnt2[i]==0)
continue;
if(cnt2[i]>przew){
cnt2[i]-=przew;
akt++;
przew=0;
while(cnt2[i]>mid){
cnt2[i]-=mid;
akt++;
}
if(cnt2[i]<=mid)
przew=mid-cnt2[i];
cnt2[i]=0;
if(akt>i+d)
flaga=false;
}
else{
przew-=cnt2[i];
cnt2[i]=0;
if(akt>i+d)
flaga=false;
}
}
cnt2=cnt;
if(flaga)
prawo=mid-1;
else
lewo=mid+1;
}
cout<<lewo<<'\n';
int ile=0;
for(int i=0;i<n;i++){
for(int j=0;j<lewo;j++){
if(ile<m)
cout<<xd[ile].second<<' ';
ile++;
}
cout<<0<<'\n';
}
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |