Submission #375277

#TimeUsernameProblemLanguageResultExecution timeMemory
375277YJUJob Scheduling (CEOI12_jobs)C++14
95 / 100
926 ms35180 KiB
#include<bits/stdc++.h> #pragma GCC optimize("unroll-loops,no-stack-protector,Ofast") using namespace std; typedef long long ll; typedef pair<ll,ll> pll; typedef long double ld; const ll N=1e6+5; const ll MOD=1e9+7; const ld pi=acos(-1); #define REP(i,n) for(int i=0;i<n;++i) #define REP1(i,n) for(int i=1;i<=n;++i) #define pb push_back #define mp make_pair #define X first #define Y second #define lwb lower_bound #define SZ(_a) (ll)_a.size() ll n,st[N],d,m,ans[N],lis[N]; ll que[N]; bool ck(ll k){ ll nl=0,nr=0; for(int i=1,id=1;i<=n;i++){ while(id<=m&&st[lis[id]]==i)que[nr++]=(lis[id]),++id; REP(j,k){ if(nr-nl==0)break; ans[que[nl++]]=i; } if(nr-nl&&st[que[nl]]+d<=i)return 0; } return 1; } int main(){ ios_base::sync_with_stdio(0);cin.tie(0); cin>>n>>d>>m; REP1(i,m){ cin>>st[i]; lis[i]=i; } sort(lis+1,lis+m+1,[&](ll a,ll b){ return (st[a]<st[b]); }); //REP1(i,m)cout<<lis[i]<<st[lis[i]]<<"\n"; ll r=m,l=-1; while(l<r-1){ ll mid=(l+r)>>1; if(ck(mid)){ r=mid; }else{ l=mid; } } cout<<r<<"\n"; ck(r); sort(lis+1,lis+m+1,[&](ll a,ll b){ return (ans[a]<ans[b]); }); //REP1(i,m)cout<<lis[i]<<" "<<ans[lis[i]]<<"\n"; for(int i=1,id=1;i<=n;i++){ while(id<=m&&ans[lis[id]]==i)cout<<lis[id]<<" ",++id; cout<<"0\n"; } return 0; } /* 8 2 12 1 2 4 2 1 3 5 6 2 3 6 4 */
#Verdict Execution timeMemoryGrader output
Fetching results...