Submission #500147

#TimeUsernameProblemLanguageResultExecution timeMemory
500147mhsi2005Job Scheduling (CEOI12_jobs)C++17
40 / 100
1097 ms37216 KiB
// In the name of God #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; #include <ext/pb_ds/assoc_container.hpp> using namespace __gnu_pbds; template <class T> using indexed_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; #define watch(x) cerr << "{" << (#x) << " = " << x << "}" << '\n'; #define watch2(x, y) cerr << "{" << (#x) << " = " << x << ", " << (#y) << " = " << y << "}" << '\n'; #define watch3(x, y, z) cerr << "{" << (#x) << " = " << x << ", " << (#y) << " = " << y << ", " << (#z) << " = " << z << "}" << '\n'; #define fast_io ios::sync_with_stdio(false); cin.tie(0), cout.tie(0); const ll maxn = 1e6 + 10, INF = 1e9; int n, d, m; pii a[maxn]; vector<vector<int>> ans(n); bool ok (int x) { ans.clear(); ans.resize(n+10); multiset<int> s; for (int i = 0; i < x; i++) s.insert(1); for (int i = 0; i < m; i++) { auto it = s.upper_bound(a[i].first + d); if (it == s.begin()) { if (*it - a[i].first > d) return false; } else it--; assert(it != s.end()); int f = *it; s.erase(it); s.insert(max(f, a[i].first) + 1); ans[max(f, a[i].first)].push_back(a[i].second); } return true; } int main() { fast_io cin >> n >> d >> m; for (int i = 0; i < m; i++) { cin >> a[i].first; a[i].second = i+1; } sort(a, a + m); int l = 0, r = 1e6; while (r > l + 1) { int mid = (r + l) / 2; if (ok(mid)) r = mid; else l = mid; } cout << r << '\n'; for (int i = 1; i <= n; i++) { for (int x : ans[i]) { cout << x << ' '; } cout << 0 << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...