#include "bits/stdc++.h"
using namespace std;
#define fast ios_base::sync_with_stdio(0) , cin.tie(0) , cout.tie(0)
#define endl '\n'
using ll=long long;
void solve() {
int n;
ll a,b;
cin >> n >> a >> b;
ll m = a*b/gcd(b+1,a);
//vector<pair<ll,ll>> ivals;
vector<pair<ll,bool>> evs;
ll ans = -1;
for (int i =0;i<n;i++){
ll l,r;
cin >> l >> r;
if (r-l >= m-1){
ans = m;
continue;
}
//add interval
if (l%m <= r%m){
evs.push_back({l%m,true});
evs.push_back({r%m,false});
} else {
evs.push_back({l%m,true});
evs.push_back({m-1,false});
evs.push_back({0,true});
evs.push_back({r%m,false});
}
}
if (ans!=-1){
cout << ans << endl;
return;
}
ans=0;
sort(evs.begin(),evs.end(),[&](pair<ll,bool>&a, pair<ll,bool>& b){
if (a.first != b.first){
return a.first<b.first;
} else{
return a.second;
}
});
int i=0;
int curis = 0;
ll prevst = -1;
while (i<evs.size()){
ll curt= evs[i].first;
ll curty = evs[i].second;
while (i<evs.size() && evs[i].first==curt && evs[i].second==curty){
if (evs[i].second){
//cout << "start " << curt << endl;
curis++;
} else {
//cout << "end " << curt << endl;
curis--;
}
i++;
}
if (curis == 0){
ans += curt-prevst+1;
prevst=-1;
} else if (prevst==-1){
prevst=curt;
}
//cout << curis << " " << prevst << " " << ans << endl;
}
cout << ans << endl;
}
signed main() {
fast;
int t=1;
while (t--) solve();
return 0;
}
# | 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... |