Submission #207136

#TimeUsernameProblemLanguageResultExecution timeMemory
207136zvonimir11Job Scheduling (CEOI12_jobs)C++17
100 / 100
649 ms17032 KiB
#include <iostream> #include <cstring> #include <algorithm> #include <vector> #include <queue> using namespace std; int n, m, d, a[1000005], b[100005]; vector<int> dn[100005]; bool f(int x, bool is) { queue<int> p; for(int i = 1; i <= n; ++i) { int o = x; while(!p.empty() && o > 0) { if(i - p.front() > d) return 0; --o; if(is) cout << dn[p.front()].back() << " ", dn[p.front()].pop_back(); p.pop(); } for(int j = 0; j < b[i]; ++j) { if(o > 0) { --o; if(is) cout << dn[i].back() << " ", dn[i].pop_back(); continue; } p.push(i); } if(is) cout << 0 << endl; } if(p.size() > 0) return 0; return 1; } int main() { cin >> n >> d >> m; for(int i = 0; i < m; ++i) cin >> a[i], ++b[a[i]], dn[a[i]].push_back(i + 1); int lo = 1, hi = 1000005; while(lo < hi) { int md = (hi + lo) / 2; if(f(md, 0)) hi = md; else lo = md + 1; } cout << lo << endl; f(lo, 1); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...