Submission #694185

#TimeUsernameProblemLanguageResultExecution timeMemory
694185vjudge1Job Scheduling (CEOI12_jobs)C++17
15 / 100
1076 ms48352 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define all(s) s.begin(), s.end() #ifndef LOCALDEBUG #define LOCALDEBUG false #endif typedef long long ll; typedef vector<int> vi; typedef vector<vi> vvi; typedef pair<int, int> pii; struct request { int day, id; }; int n, d, m; vector<request> requestsOnDay[(int)1e6 + 1]; bool operator<(const request &a, const request &b) { return a.day >= b.day; } bool check(int machines) { priority_queue<request> active; for (int i = 1; i <= n; i++) { // get new requests for (request r : requestsOnDay[i]) active.push(r); int mm = machines; while (!active.empty() && mm--) { int cur = active.top().day; if (cur + d < i) return false; else active.pop(); } } return active.size() == 0; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n >> d >> m; for (int i = 0; i < m; i++) { int x; cin >> x; requestsOnDay[x].pb({x, i}); } int lo = 1, hi = 1e6; while (lo < hi) { int mid = (lo + hi) / 2; if (check(mid)) hi = mid - 1; else lo = mid + 1; } cout << lo << '\n'; vvi onDay(n + 1); priority_queue<request> active; for (int i = 1; i <= n; i++) { // get new requests for (request r : requestsOnDay[i]) active.push(r); int mm = lo; while (!active.empty() && mm--) { int cur = active.top().id; onDay[i].pb(cur); active.pop(); } } for (int i = 0; i < n; i++) { for (int id : onDay[i + 1]) cout << id + 1 << " "; cout << "0\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...