Submission #93995

#TimeUsernameProblemLanguageResultExecution timeMemory
93995rkocharyanJob Scheduling (CEOI12_jobs)C++14
100 / 100
162 ms13304 KiB
#include <bits/stdc++.h> using namespace std; const int N = 1e5 + 7; int n, d, m; int f[N]; vector <int> g[N]; bool check(int t) { deque < pair <int, int> > h; for(int i = 1; i <= n; i++) { if(f[i]) h.emplace_back(i, f[i]); int cur_t = t; while(!h.empty() && cur_t) { if(i - h[0].first > d) return false; int next_t = cur_t; next_t -= min(h[0].second, cur_t); h[0].second -= min(h[0].second, cur_t); cur_t = next_t; if(h[0].second == 0) { h.pop_front(); } } } if(h.size()) return false; return true; } int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> d >> m; for(int i = 0; i < m; i++) { int x; cin >> x; f[x]++; g[x].push_back(i + 1); } int low = 1, high = m, best = m; while(low <= high) { int mid = (low + high) >> 1; if(check(mid)) { best = mid; high = mid - 1; } else { low = mid + 1; } } cout << best << '\n'; deque < pair <int, int> > h; for(int i = 1; i <= n; i++) { if(f[i]) h.emplace_back(i, f[i]); int cur_t = best; while(!h.empty() && cur_t) { int next_t = cur_t; for(int j = 0; j < min(h[0].second, cur_t); j++) { cout << g[h[0].first].back() << ' '; g[h[0].first].pop_back(); } next_t -= min(h[0].second, cur_t); h[0].second -= min(h[0].second, cur_t); cur_t = next_t; if(h[0].second == 0) { h.pop_front(); } } cout << "0\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...