제출 #856243

#제출 시각아이디문제언어결과실행 시간메모리
856243vjudge1Job Scheduling (CEOI12_jobs)C++17
0 / 100
238 ms65536 KiB
#include<bits/stdc++.h> using namespace std; set<int> pos[(int)1e6 + 7]; int main() { int t = 1; // cin >> t; while(t --) { int n, d, m; cin >> n >> d >> m; map<int, int> mp, mp2; for(int i = 0, x; i < m; i ++) { cin >> x; pos[x].insert(i + 1); mp2[x] ++; } int l = 1, r = m; while(l <= r) { int mid = (l + r) / 2; mp = mp2; for(int i = 1; i <= n && !mp.empty(); i ++) { int sum = mid; while(!mp.empty() && mp.begin()->first <= i && sum) { int x = mp.begin()->first; int y = mp.begin()->second; int dd = min(sum, y); sum -= dd; if(dd == y) mp.erase(x); else mp[x] -= dd; } } if(mp.empty()) r = mid - 1; else l = mid + 1; } mp = mp2; cout << l << '\n'; for(int i = 1; i <= n; i ++) { int sum = l; while(!mp.empty() && mp.begin()->first <= i && sum) { int x = mp.begin()->first; int y = mp.begin()->second; int dd = min(sum, y); sum -= dd; if(dd == y) mp.erase(x); else mp[x] -= dd; while(dd --) { cout << *pos[x].begin() << ' '; pos[x].erase(pos[x].begin()); } } cout << "0\n"; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...