Submission #1245450

#TimeUsernameProblemLanguageResultExecution timeMemory
1245450wedonttalkanymoreJob Scheduling (CEOI12_jobs)C++20
95 / 100
971 ms33876 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

#define int long long
#define pii pair<ll, ll>
#define fi first
#define se second

const ll N = 2e5 + 5, inf = 1e18, mod = 1e9 + 7, block = 320, lim = 1 << 16;

int n,d,m;
vector<pii> jobs;
vector<int> days[N];
priority_queue<pii,vector<pii>,greater<pii>> pq;

bool check(int mid)
{
    for(int i=1;i<=n;i++) days[i].clear();
    while(!pq.empty()) pq.pop();
    int idx=0;
    for(int i=1;i<=n;i++)
    {
        while(idx<m && jobs[idx].fi<=i)
        {
            pq.push(make_pair(jobs[idx].fi + d,jobs[idx].se));
            idx++;
        }
        int cap=mid;
        while(cap>0 && !pq.empty())
        {
            pii cur=pq.top(); pq.pop();
            if(cur.fi < i) return false;
            days[i].push_back(cur.se);
            cap--;
        }
    }
    return pq.empty();
}

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin>>n>>d>>m;
    for(int i=1;i<=m;i++)
    {
        int s; cin>>s;
        jobs.push_back(make_pair(s,i));
    }
    sort(jobs.begin(),jobs.end());

    int l=1, r=m, ans=m;
    while(l<=r)
    {
        int mid=(l+r)/2;
        if(check(mid))
        {
            ans=mid;
            r=mid-1;
        }
        else
        {
            l=mid+1;
        }
    }

    check(ans);
    cout<<ans<<"\n";
    for(int i=1;i<=n;i++)
    {
        for(int id:days[i]) cout<<id<<" ";
        cout<<"0\n";
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...