Submission #212663

#TimeUsernameProblemLanguageResultExecution timeMemory
212663vioalbert이상한 기계 (APIO19_strange_device)C++14
100 / 100
656 ms69932 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...