Submission #1227036

#TimeUsernameProblemLanguageResultExecution timeMemory
1227036ssitaramStrange Device (APIO19_strange_device)C++20
100 / 100
621 ms79644 KiB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef long double ld;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int n; cin >> n;
	ll A, B; cin >> A >> B;
	ll MOD = A / gcd(B + 1, A);
	if (MOD >= 2e18 / B) {
		MOD = 2e18;
	} else {
		MOD *= B;
	}
	cerr << MOD << '\n';
	map<ll, int> mp;
	while (n--) {
		ll l, r; cin >> l >> r;
		if (r - l + 1 >= MOD) {
			cout << MOD << '\n';
			return 0;
		}
		l %= MOD;
		r %= MOD;
		if (l <= r) {
			++mp[l];
			if (r + 1 != MOD) --mp[r + 1];
		} else {
			++mp[l];
			++mp[0];
			--mp[r + 1];
		}
	}
	vector<pair<ll, int>> v;
	for (auto& [a, b] : mp) {
		v.push_back({a, b});
	}
	int h = 0;
	ll ans = 0;
	for (int i = 0; i < v.size(); ++i) {
		h += v[i].second;
		if (h > 0) {
			ans += (i == v.size() - 1 ? MOD : v[i + 1].first) - v[i].first;
		}
	}
	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...