Submission #587765

#TimeUsernameProblemLanguageResultExecution timeMemory
587765stevancvStrange Device (APIO19_strange_device)C++14
35 / 100
960 ms100316 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;
    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...