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 IOS ios_base::sync_with_stdio(false);cin.tie();cout.tie();
#define all(x) x.begin(), x.end()
#define int long long
#define pi pair<int, int >
#define pq priority_queue
#define lb lower_bound
#define ub upper_bound
#define pb push_back
#define eb emplace_back
#define mset multiset
#define F first
#define S second
using namespace std;
const int INF = 1e18;
int n, A, B, s;
int l[1000001];
int r[1000001];
int gcd(int a, int b) {return (a == 0 ? b : gcd(b % a, a));}
void solve ()
{
cin >> n >> A >> B;
for(int i = 0; i < n; i++){
cin >> l[i] >> r[i];
s += r[i] - l[i] + 1;
}
map<int, int> cnt;
if (INF / A < (B + 1) / gcd(B + 1, A)) {return void(cout << s);}
int cyc = A / gcd(A, B + 1) * B;
vector<pair<int, int>> range;
for (int i = 0; i < n; i++) {
if (r[i] - l[i] + 1 >= cyc) {return void(cout << cyc);}
if ((l[i] %= cyc) <= (r[i] %= cyc)) {range.pb({l[i], r[i]});}
else {range.pb({l[i], cyc - 1}); range.pb({0, r[i]});}
} sort(all(range));
int ans = range[0].S - range[0].F + 1, pre = range[0].S;
for (int i = 1; i < range.size(); i++) {
if (range[i].S > pre) {
ans += range[i].S - max(range[i].F, pre + 1) + 1;
pre = range[i].S;
}
}
cout << ans;
}
signed main(){IOS solve(); return 0;}
Compilation message (stderr)
strange_device.cpp: In function 'void solve()':
strange_device.cpp:41:20: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
41 | for (int i = 1; i < range.size(); i++) {
| ~~^~~~~~~~~~~~~~
# | 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... |