제출 #587767

#제출 시각아이디문제언어결과실행 시간메모리
587767stevancv이상한 기계 (APIO19_strange_device)C++14
100 / 100
836 ms100072 KiB
#include <bits/stdc++.h> #define ll long long #define ld long double #define sp ' ' #define en '\n' #define smin(a, b) a = min(a, b) #define smax(a, b) a = max(a, b) using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int q; ll a, b; cin >> q >> a >> b; ll p = (a / __gcd(a, b + 1)) * b; if (p <= 0) p = 2e18; set<pair<ll, ll>> s; function<void(ll, ll)> Add = [&] (ll l, ll r) { auto it = s.lower_bound({l, 0}); ll mn = 2e18; ll mx = -1; while (it != s.end() && (*it).second <= r) { smin(mn, (*it).second); smax(mx, (*it).first); it = s.erase(it); } smin(mn, l); smax(mx, r); s.insert({mx, mn}); }; while (q--) { ll l, r; cin >> l >> r; if (r - l + 1 >= p) {Add(0, p - 1); continue;} l %= p; r %= p; if (l > r) {Add(l, p - 1); Add(0, r);} else Add(l, r); } ll ans = 0; for (auto u : s) { ans += u.first - u.second + 1; } cout << ans << en; return 0; }
#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...