Submission #527126

#TimeUsernameProblemLanguageResultExecution timeMemory
527126Leonardo_PaesStrange Device (APIO19_strange_device)C++17
35 / 100
737 ms78896 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll,ll> pii; #define f first #define s second // number x and x + (a / gcd(a, b+1) * b) are equal ll gcd(ll a, ll b){ if(b == 0) return a; return gcd(b, a%b); } bool overflow(ll a, ll b){ ll v = a*b; if(a == v/b) return true; return false; } const ll inf = 1e18; int main(){ ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); int n; ll a, b; cin >> n >> a >> b; ll aux = a / (gcd(a, b+1)); bool ok = overflow(aux, b); ll m = (ok ? aux * b : inf + 1); vector<pii> v; bool mx = 0; for(int i=0; i<n; i++){ ll l, r; cin >> l >> r; if(r-l+1 > m) mx = 1; l = l % m, r = r % m; if(n == 1){ if(mx) cout << m << "\n"; else cout << r-l+1 << "\n"; return 0; } if(l <= r){ v.push_back({l, r}); v.push_back({r, inf + 5}); } else{ v.push_back({l, m-1}); v.push_back({m-1, inf + 5}); v.push_back({0, r}); v.push_back({r, inf + 5}); } } if(mx){ cout << m << "\n"; return 0; } multiset<ll> s; ll ans = 0; sort(v.begin(), v.end()); for(pii x : v){ ll l = x.f, r = x.s; //cout << l << " " << r << "\n"; if(r == inf + 5){ // out s.erase(s.find(-l)); } else{ // in if(s.empty()) ans += r-l+1; else{ ll mxx = -(*s.begin()); ans += max(0LL, r-mxx); } s.insert(-r); } } 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...