Submission #1223845

#TimeUsernameProblemLanguageResultExecution timeMemory
1223845kunzaZa183Strange Device (APIO19_strange_device)C++20
100 / 100
4900 ms376220 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; int main() { cin.tie(0)->sync_with_stdio(0); int n; ll A, B; cin >> n >> A >> B; vector<ll> l(n), r(n); for (int i = 0; i < n; i++) cin >> l[i] >> r[i]; ll reps = A / __gcd(A, B + 1); map<ll, vector<pair<ll, bool>>> mlvl; mlvl[B] = {}; map<ll, ll> mli; for (int i = 0; i < n; i++) { ll row1 = l[i] / B, row2 = r[i] / B; if (row1 == row2) { mlvl[l[i] % B].emplace_back(row1, 1); mlvl[r[i] % B + 1].emplace_back(row1, 0); } else { mlvl[l[i] % B].emplace_back(row1, 1); mlvl[B].emplace_back(row1, 0); if (row1 + 1 < row2) { ll lr = row1 + 1, rr = row2 - 1; if (rr - lr + 1 >= reps) { cout << reps * B << "\n"; return 0; } lr %= reps, rr %= reps; if (lr <= rr) { mli[lr]++; mli[rr + 1]--; } else { mli[lr]++; mli[reps]--; mli[0]++; mli[rr + 1]--; } } mlvl[0].emplace_back(row2, 1); mlvl[r[i] % B + 1].emplace_back(row2, 0); } } vector<pair<ll, ll>> perm; ll ct = 0; for (auto a : mli) { if (ct == 0 && a.second >= 0) { perm.emplace_back(a.first, -1); } else if (ct > 0 && ct + a.second == 0) { perm.back().second = a.first; } ct += a.second; } map<ll, int> temp; ll sumrn = 0; for (auto a : perm) sumrn += a.second - a.first; ll cur = 0, ans = 0; for (auto &[in, vpllb] : mlvl) { ans += (in - cur) * sumrn; for (auto [row, stat] : vpllb) { row %= reps; auto it = upper_bound(perm.begin(), perm.end(), make_pair(row, LLONG_MAX)); if (it == perm.begin() || row >= (it - 1)->second) { if (stat) { temp[row]++; if (temp[row] == 1) sumrn++; } else { temp[row]--; if (temp[row] == 0) sumrn--; } } } cur = in; } cout << ans << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...