Submission #1299464

#TimeUsernameProblemLanguageResultExecution timeMemory
1299464algorubikJob Scheduling (CEOI12_jobs)C++20
0 / 100
397 ms51812 KiB
#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 timeMemoryGrader output
Fetching results...