#include<iostream>
#include<vector>
#include<algorithm>
#include<utility>
#include<numeric>
using namespace std;
typedef long long ll;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int n;
ll a, b;
cin >> n >> a >> b;
ll resa = a / gcd(a, b + 1);
ll res = 2e18;
if(res / resa >= b) res = min(res, resa * b);
vector<pair<ll, int>> vec;
for(int i = 0; i < n; i++){
ll l, r;
cin >> l >> r;
if(r - l + 1 >= res){
cout << res << "\n";
return 0;
}
l = l % res;
r = r % res;
if(l <= r){
vec.emplace_back(l, 1);
vec.emplace_back(r + 1, -1);
}
else{
vec.emplace_back(l, 1);
vec.emplace_back(res, -1);
vec.emplace_back(0, 1);
vec.emplace_back(r + 1, -1);
}
}
vec.emplace_back(res, 0);
ll ans = 0;
int cnt = 0;
sort(vec.begin(), vec.end());
int sz = (int)vec.size();
for(int i = 0; i < sz; i++){
if(vec[i].first == res) break;
cnt += vec[i].second;
if(cnt > 0){
ans += vec[i + 1].first - vec[i].first;
}
}
cout << ans << "\n";
}
# | 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... |