Submission #500128

#TimeUsernameProblemLanguageResultExecution timeMemory
500128mhsi2005Job Scheduling (CEOI12_jobs)C++17
40 / 100
1095 ms12408 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]; bool ok (ll x) { 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--; s.insert(max(*it, a[i].first) + 1); s.erase(it); } 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 = 1e5; while (r > l + 1) { int mid = (r + l) / 2; if (ok(mid)) r = mid; else l = mid; } cout << r << '\n'; vector<int> ans[(int)1e5 + 10]; multiset<int> s; for (int i = 1; i <= r; i++) s.insert(1); for (int i = 0; i < m; i++) { auto it = s.upper_bound(a[i].first + d); if (it != s.begin()) it--; // watch2(*it, a[i].first) ans[max(*it, a[i].first)].push_back(a[i].second); s.insert(max(*it, a[i].first) + 1); s.erase(it); // for (int i : s) // cout << i << ' '; // cout << '\n'; } // cout << '\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...