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>
using namespace std;
typedef long long ll;
ll n, a, b;
pair<ll, ll> t[2000005];
stack<pair<ll, ll>> st;
ll gcd(ll a, ll b) {
if(b == 0) return a;
else return gcd(b, a%b);
}
int main() {
ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
cin >> n >> a >> b;
ll g = gcd(a,b+1);
ll k = a/g;
ll tlimit = k * b;
int idx = 0;
for(int i = 0; i < n; i++) {
ll l, r; cin >> l >> r;
if(l/tlimit == r/tlimit) {
t[idx++] = make_pair(l%tlimit, r%tlimit);
} else if(l/tlimit == (r/tlimit - 1)) {
t[idx++] = make_pair(l%tlimit, tlimit-1);
t[idx++] = make_pair(0ll, r%tlimit);
} else {
t[idx++] = make_pair(0ll, tlimit-1);
}
}
sort(t, t+idx);
st.push(t[0]);
for(int i = 1; i < idx; i++) {
if(st.top().second < t[i].first)
st.push(t[i]);
else if(st.top().second < t[i].second)
st.top().second = t[i].second;
}
ll ans = 0;
while(!st.empty()) {
ans += 1ll * (st.top().second - st.top().first + 1);
st.pop();
}
cout << ans << '\n';
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... |