제출 #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...