Submission #1340195

#TimeUsernameProblemLanguageResultExecution timeMemory
1340195ChocoJob Scheduling (CEOI12_jobs)C++20
100 / 100
244 ms15076 KiB
#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("O3")
#define ll int
#define double double long
#define fori(i,j,k) for(ll i=j; i<=k;i++)
#define study ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define pb push_back
#define all(s) s.begin(),s.end()
#define ins insert
#define ss second
#define ff first
#ifndef DB
#define DB 0
#endif
#define debugl(l) if constexpr((l)<DB)
#define debug debugl(0)
const ll sz=1e6+10;
ll INF=1e9;
ll mod=1e9+7;
void work(){
    ll n,d,m;
    cin>>n>>d>>m;
    vector<pair<ll,ll>>v(m);
    vector<ll>ig;
    fori(i,0,m-1){
        cin>>v[i].ff;
        v[i].ss=i;
    }
    sort(all(v));
    vector<ll>en(n+10,0),cnt(n+10,0);
    fori(i,0,m-1){
        cnt[v[i].ff]++;
        en[v[i].ff]=i+1;    
    }
    fori(i,1,n-d){
    if(en[i]==0)
    en[i]=en[i-1];
    ig.pb(en[i]);
    }
    ll l=1,r=sz;
    while(l<=r){
        ll mid=(l+r)>>1;
        bool ok=1;
        ll j=0;
        debug{
            cout<<mid<<"\n";
        }
        fori(i,1,n){
            ll cur=0;
            while(v[j].ff<=i and cur<mid){
            if((i-(v[j].ff))>d)
            ok=0;
            debug{
            cout<<v[j].ff<<" "<<i<<" "<<cur<<endl;
            }
            j++;
            cur++;
            if(j==m)
            break;
            }
            if(j==m)
            break;
        }
        if(j<m )
        ok=0;
        if(ok==0){
            l=mid+1;
        }
        else{
            r=mid-1;
        }
    }
    /*
    8 2 12
    1 2 4 2 1 3 5 6 2 3 6 4
    */
    ll p=r+1;
    cout<<p<<endl;
    ll cur=0;
    ll pp=0;
    fori(i,0,m-1){
        while( v[i].ff>(pp+1)){
            cout<<0<<endl;
            cur=0;
            pp++;
        }
        cout<<(v[i].ss+1)<<' ';
        cur++;
        if((cur%p)==0){
            cur=0;
            cout<<0<<endl;
            pp++;
        }

    }
    fori(i,1,n-pp)
    cout<<0<<endl;
}
int main()
{
    //#ifndef LOCAL
    // freopen("log1.txt","r",stdin);
    // freopen("log2.txt","w",stdout);
    //#endif
    study;
    ll t=1;
    //cin>>t;
    fori(i,1,t){
        work();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...