Submission #1302114

#TimeUsernameProblemLanguageResultExecution timeMemory
1302114dru-_-Job Scheduling (CEOI12_jobs)C++20
100 / 100
202 ms14276 KiB
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

bool func(int n,int d,int m,const vector<pair<int,int>>& id,int mid)
{
    int ptr=0;
    for(int i=0;i<n;++i)
    {
        for(int j=0;ptr<m && j<mid;++j)
        {
            if(id[ptr].first+d<i)
                return false;
            else if(id[ptr].first<=i)
                ++ptr;
        }
    }

    return true;
}

int main()
{
    std::ios::sync_with_stdio(false);
	std::cin.tie(NULL);

    int n,d,m;
    cin>>n>>d>>m;

    vector<int> cnt(n);
    vector<pair<int,int>> id(m);

    for(int i=0;i<m;++i)
    {
        int t;
        cin>>t;
        --t;

        ++cnt[t];
        id[i]={t,i+1};
    }
    
    sort(id.begin(),id.end());

    int lo=0,hi=-1;
    for(int i=0;i<n;++i)
        hi=max(hi,cnt[i]);

    while(hi-lo>1)
    {
        int mid=(hi+lo)/2;

        if(func(n,d,m,id,mid))
            hi=mid;
        else
            lo=mid;
    }

    cout<<hi<<'\n';

    int j=0;
    for(int i=0;i<n;++i)
    {
        int lim=j+hi;
        for(;j<m && j<lim && id[j].first<=i;++j)
            cout<<id[j].second<<' ';
        cout<<0<<'\n';
    }

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...