Submission #527091

#TimeUsernameProblemLanguageResultExecution timeMemory
527091Leonardo_PaesStrange Device (APIO19_strange_device)C++17
35 / 100
680 ms79024 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 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(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; 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...