#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<ll,ll>
#define X first
#define Y second
const int N=1e6+5;
const ll oo=1e18+1;
int request; ll A,B,l,r,x,y,z,temp;
namespace subfull
{
int h; ll res;
int f[2*N]; ll l[N],r[N];
vector <ll> ve;
void solve()
{
y=B+1;
temp=__gcd(A,y);
y=B;
if (oo/A<y/temp) z=oo;
else z=A/temp*y;
for (int i=1;i<=request;i++)
{
cin >> l[i] >> r[i];
if (r[i]-l[i]+1>=z)
{
cout << z;
return;
}
r[i]++;
if (l[i]/z==r[i]/z)
{
ve.push_back(l[i]%z);
ve.push_back(r[i]%z);
}
else
{
ve.push_back(l[i]%z);
ve.push_back(z);
ve.push_back(0);
ve.push_back(r[i]%z);
}
}
sort(ve.begin(),ve.end());
ve.resize(unique(ve.begin(),ve.end())-ve.begin());
h=ve.size();
f[0]=0;
for (int i=1;i<=request;i++)
{
if (l[i]/z==r[i]/z)
{
x=lower_bound(ve.begin(),ve.end(),l[i]%z)-ve.begin()+1;
y=lower_bound(ve.begin(),ve.end(),r[i]%z)-ve.begin()+1;
f[x]++;
f[y]--;
}
else
{
x=lower_bound(ve.begin(),ve.end(),l[i]%z)-ve.begin()+1;
y=lower_bound(ve.begin(),ve.end(),z)-ve.begin()+1;;
f[x]++;
f[y]--;
x=lower_bound(ve.begin(),ve.end(),0)-ve.begin()+1;
y=lower_bound(ve.begin(),ve.end(),r[i]%z)-ve.begin()+1;
f[x]++;
f[y]--;
}
}
res=0;
for (int i=1;i<h;i++)
{
f[i]+=f[i-1];
if (f[i]) res+=ve[i]-ve[i-1];
}
cout << res;
}
}
int main()
{
ios_base::sync_with_stdio(NULL);
cin.tie(NULL); cout.tie(NULL);
cin >> request >> A >> B;
subfull::solve();
}
# | 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... |