#include <bits/stdc++.h>
using namespace std;
#define fo(i, n) for (ll i = 0; i < n; i++)
#define Fo(i, k, n) for (ll i = k; k < n ? i < n : i > n; k < n ? i += 1 : i -= 1)
#define ll long long
#define pb push_back
#define F first
#define S second
#define yes cout<<'Y'<<'E'<<'S'<<endl;
#define no cout<<'N'<<'O'<<endl;
typedef vector<long long> vll;
const ll MOD = 1e9 + 7;
void solve(){
ll n,d,m;cin>>n>>d>>m;
ll arr[m];
fo(i,m){
cin>>arr[i];
}
ll r = 1;
ll e = 2;
ll ans = 0;
map<ll,vll> mm;
while(r<=e){
ll mid = (r+e)/2;
vector<pair<ll,ll>> v;
queue<pair<ll,ll>> q;
fo(i,m){
v.push_back({arr[i],i});
}
sort(v.begin(),v.end());
fo(i,m){
q.push(v[i]);
}
ll curday = 1;
vll arr1(m,1e8);
bool check = 1;
ll current_work = mid;
while(q.size()!=0 && curday<=n){
if(q.size()>0 && current_work>0 && q.front().F<=curday){
current_work--;
arr1[q.front().S] = curday;
q.pop();
}
if(current_work==0){
curday++;
current_work = mid;
}
if(q.front().F>curday){
current_work = mid;
curday++;
}
}
fo(i,m){
if(arr1[i]-arr[i]>d){
check = 0;
break;
}
}
if(check){
ans = mid;
e = mid - 1;
}
else{
r = mid + 1;
}
}
vector<pair<ll,ll>> v;
queue<pair<ll,ll>> q;
fo(i,m){
v.push_back({arr[i],i});
}
sort(v.begin(),v.end());
fo(i,m){
q.push(v[i]);
}
ll curday = 1;
vll arr1(m,1e8);
bool check = 1;
ll current_work = ans;
while(q.size()!=0 && curday<=n){
if(q.size()>0 && current_work>0 && q.front().F<=curday){
current_work--;
mm[curday].pb(q.front().S+1);
q.pop();
}
if(current_work==0){
curday++;
current_work = ans;
}
if(q.front().F>curday){
current_work = ans;
curday++;
}
}
cout<<ans<<"\n";
fo(i,n){
for(auto x:mm[i+1]){
cout<<x<<" ";
}cout<<0<<"\n";
}
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
ll test;
test = 1;
// cin >> test;
while (test--)
{
solve();
}
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |