Submission #1150437

#TimeUsernameProblemLanguageResultExecution timeMemory
1150437windowwifeStrange Device (APIO19_strange_device)C++20
100 / 100
305 ms56388 KiB
#include<bits/stdc++.h>
#define ll long long
#define task ""
using namespace std;
const ll maxn = 1e6 + 1, inf = (ll)1e18 + 1;
ll n, A, B, p, l[maxn], r[maxn], res = 0;
vector<pair<ll, ll>> v, v2;
int main()
{
    //freopen(task".INP", "r", stdin);
    //freopen(task".OUT", "w", stdout);
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cin >> n >> A >> B;
    for (int i = 1; i <= n; i++) cin >> l[i] >> r[i];
    p = A/__gcd(A, B + 1);
    if (p > inf/B) p = inf;
    else p *= B;
    if (p == inf)
    {
        for (int i = 1; i <= n; i++) res += r[i] - l[i] + 1;
        cout << res;
        return 0;
    }
    for (int i = 1; i <= n; i++)
    {
        if (r[i] - l[i] + 1 >= p) v.push_back({0, p - 1});
        else
        {
            if (l[i] % p <= r[i] % p) v.push_back({l[i] % p, r[i] % p});
            else
            {
                v.push_back({0, r[i] % p});
                v.push_back({l[i] % p, p - 1});
            }
        }
    }
    sort(v.begin(), v.end());
    for (pair<ll, ll> p : v)
    {
        while (!v2.empty() && v2.back().second >= p.first)
        {
            p.first = min(p.first, v2.back().first);
            p.second = max(p.second, v2.back().second);
            v2.pop_back();
        }
        v2.push_back(p);
    }
    for (pair<ll, ll> p : v2)
    {
        //cout << p.first << " " << p.second << '\n';
        res += (p.second - p.first + 1);
    }
    cout << res;
}
#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...