Submission #1150437

#TimeUsernameProblemLanguageResultExecution timeMemory
1150437windowwife이상한 기계 (APIO19_strange_device)C++20
100 / 100
305 ms56388 KiB
#include<bits/stdc++.h> #define ll long long #define task "" using namespace std; const ll maxn = 1e6 + 1, inf = (ll)1e18 + 1; ll n, A, B, p, l[maxn], r[maxn], res = 0; vector<pair<ll, ll>> v, v2; int main() { //freopen(task".INP", "r", stdin); //freopen(task".OUT", "w", stdout); ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> A >> B; for (int i = 1; i <= n; i++) cin >> l[i] >> r[i]; p = A/__gcd(A, B + 1); if (p > inf/B) p = inf; else p *= B; if (p == inf) { for (int i = 1; i <= n; i++) res += r[i] - l[i] + 1; cout << res; return 0; } for (int i = 1; i <= n; i++) { if (r[i] - l[i] + 1 >= p) v.push_back({0, p - 1}); else { if (l[i] % p <= r[i] % p) v.push_back({l[i] % p, r[i] % p}); else { v.push_back({0, r[i] % p}); v.push_back({l[i] % p, p - 1}); } } } sort(v.begin(), v.end()); for (pair<ll, ll> p : v) { while (!v2.empty() && v2.back().second >= p.first) { p.first = min(p.first, v2.back().first); p.second = max(p.second, v2.back().second); v2.pop_back(); } v2.push_back(p); } for (pair<ll, ll> p : v2) { //cout << p.first << " " << p.second << '\n'; res += (p.second - p.first + 1); } cout << res; }
#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...