Submission #527606

#TimeUsernameProblemLanguageResultExecution timeMemory
527606_karan_gandhiJob Scheduling (CEOI12_jobs)C++17
70 / 100
1101 ms31852 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define all(v) v.begin(), v.end() #define endl '\n' #define pl(var) " [" << #var << ": " << (var) << "] " void solve() { int n, d, m; cin >> n >> d >> m; vector<pair<int, int>> arr(m); for (int i = 0; i < m; i++) cin >> arr[i].first; for (int i = 0; i < m; i++) arr[i].second = i + 1; sort(all(arr)); // for (auto a : arr) { // cout << a.first << ' '; // } // cout << endl; auto possible = [&](int x) { // check if it is possible to complete the jobs with x machines multiset<int> s; for (int i = 0; i < x; i++) { s.insert(arr[i].first); } for (int i = x; i < m; i++) { int last = *s.begin(); s.erase(s.find(last)); if (last + 1 - arr[i].first > d) return false; s.insert(max(last + 1, arr[i].first)); } return true; }; // cout << pl(possible(1)) << endl; int hi = m, lo = 1; int ans = 0; while (hi >= lo) { int mid = (hi + lo) / 2; if (possible(mid)) { ans = mid; hi = mid - 1; } else { lo = mid + 1; } } cout << ans << endl; // find a way to get answer vector<vector<int>> days(n + 1); multiset<int> s; for (int i = 0; i < ans; i++) { // cout << pl(arr[i].second) << endl; s.insert(arr[i].first); days[arr[i].first - 1].push_back(arr[i].second); } for (int i = ans; i < m; i++) { // cout << pl(arr[i].second) << endl; int last = *s.begin(); s.erase(s.find(last)); s.insert(max(last + 1, arr[i].first)); days[max(last + 1, arr[i].first) - 1].push_back(arr[i].second); } for (int i = 0; i < n; i++) { for (auto a : days[i]) cout << a << ' '; cout << 0 << endl; } } int main() { // freopen("socdist.in", "r", stdin); // freopen("socdist.out", "w", stdout); ios::sync_with_stdio(false); cin.tie(nullptr); // int t; cin >> t; // while (t--) solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...