Submission #212663

#TimeUsernameProblemLanguageResultExecution timeMemory
212663vioalbertStrange Device (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...