This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
#define maxn 1000005
using namespace std;
typedef long long ll;
ll n, A, B;
ll l[maxn], r[maxn];
ll ret = 0;
int main(){
// BASIC BASE
cin >> n >> A >> B;
for (ll i = 0; i < n; ++i)
cin >> l[i] >> r[i];
ll ret = A / __gcd(A, B + 1);
if (sqrt(ret) * sqrt(B) > 1e9){
ll ans = 0;
for (ll i = 0; i < n; ++i)
ans += r[i] - l[i];
cout << ans;
return 0;
}
ret *= B;
ll ans = 0;
for (ll i = 0; i < n; ++i)
if (l[i] + ret <= r[i]) return cout << ret, 0;
else l[i] %= ret, r[i] %= ret;
vector < pair <ll, ll> > a;
ll L = 0, R = ret;
for (ll i = 0; i < n; ++i)
if (l[i] > r[i]) L = max(L, r[i] + 1), R = min(R, l[i]);
else a.push_back({l[i], r[i]});
if (L > R) return cout << ret, 0;
sort(a.begin(), a.end());
ans = ret;
for (auto i : a){
if (i.first >= L) ans -= min(R, i.first) - L;
L = max(L, min(R, i.second + 1));
}
ans -= R - L;
cout << ans;
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... |