제출 #715685

#제출 시각아이디문제언어결과실행 시간메모리
71568512345678Job Scheduling (CEOI12_jobs)C++17
100 / 100
154 ms16688 KiB
#include <bits/stdc++.h>

using namespace std;

int N, D, M, d;
vector<vector<int>> v(100005);

int main()
{
    cin.tie(NULL)->sync_with_stdio(false);
    cin>>N>>D>>M;
    for (int i=1; i<=M; i++)
    {
        cin>>d;
        v[d].push_back(i);
    }
    int l=1, r=M;
    while (l<r)
    {
        int md=(l+r)/2;
        bool can=true;
        deque<pair<int, int>> dq;
        for (int i=1; i<=N; i++)
        {
            if (v[i].size()!=0)
                dq.push_back({i+D, v[i].size()});
            int mc=md;
            while (mc>0&&!dq.empty())
            {
                int cw=dq.front().second;
                if (mc>=cw)
                {
                    mc-=cw;
                    dq.pop_front();
                }
                else
                {
                    int dl=dq.front().first;
                    dq.pop_front();
                    dq.push_front({dl, cw-mc});
                    mc=0;
                    break;
                }
            }
            if (!dq.empty())
            {
                if (dq.front().first<=i)
                {
                    can=false;
                    break;
                }
            }
        }
        if (can)
            r=md;
        else
            l=md+1;
    }
    cout<<l<<'\n';
    queue<int> q;
    for (int i=1; i<=N; i++)
    {
        int left=l;
        for (auto a:v[i])
            q.push(a);
        while (!q.empty()&&left>0)
        {
            left--;
            cout<<q.front()<<' ';
            q.pop();
        }
        cout<<"0\n";
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...