Submission #1365473

#TimeUsernameProblemLanguageResultExecution timeMemory
1365473baosonnguyenthe20Job Scheduling (CEOI12_jobs)C++20
30 / 100
364 ms35344 KiB
#include <bits/stdc++.h>
#define fi first
#define se second
#define ll long long
#define N int(1e6)
using namespace std;
ll n, d, m;
struct dl
{
    ll bd, kt, id;
};
vector<dl> a[N+10];

bool operator>(const dl& a, const dl& b)
{
    return a.bd > b.bd;
}
bool kt(ll cnt)
{
    priority_queue<dl, vector<dl>, greater<dl>>pq;
    ll cv=1, day=1;
    for(int i=1; i<=n; i++)
    {
        for(auto [x, y, z]:a[i])
        {
            if(pq.size()<cnt) pq.push({x, y});
            if(pq.size()==cnt)
            {
                while(!pq.empty())
                {
                    dl x=pq.top();
                    if(x.kt<day) return 0;
                    pq.pop();
                }
                day++;
            }
        }
    }
    day-=1;
    return day<=(n+d);
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    cin>>n>>d>>m;
    for(int i=1; i<=m; i++)
    {
        ll x;
        cin>>x;
        a[x].push_back({x, x+d, i});
        //cout<<x<<" "<<x+d<<'\n';
    }
    //for(auto x:a[1]) cout<<x.fi<< " "<<x.se<<'\n';
    //for(int i=1; i<=n; i++) sort(a[i].begin(), a[i].end());
//    for(int i=1; i<=n; i++)
//    {
//        cout<<i<<'\n';
//        for(auto [x, y, z]:a[i]) cout<<x<<" "<<y<<" "<<z<<'\n';
//    }
    // cout<<a[1].size();

    ll l=1, r=n;
    ll ans=0;
    while(l<=r)
    {
        ll mid=(l+r)/2;
        if(kt(mid))
        {
            ans=mid;
            r=mid-1;
        }
        else l=mid+1;
    }
    cout<<ans<<'\n';
    ll cnt=ans;
    ll day=1;
    priority_queue<dl, vector<dl>, greater<dl>>pq;

    for(int i=1; i<=n; i++)
    {
        for(auto [x, y, id]:a[i])
        {
            if(pq.size()<cnt) pq.push({x, y, id});
            if(pq.size()==cnt)
            {
                while(!pq.empty())
                {
                    dl x=pq.top();
                    cout<<x.id<<" ";
                    pq.pop();
                }
                day++;
                cout<<0<<'\n';
            }
        }
    }
    for(int i=day;i<=n;i++) cout<<0<<'\n';
    return 0;
}

#Result Execution timeMemoryGrader output
Fetching results...