#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |