Submission #1182053

#TimeUsernameProblemLanguageResultExecution timeMemory
1182053SalihSahinStrange Device (APIO19_strange_device)C++20
70 / 100
684 ms94788 KiB
#include "bits/stdc++.h" #define pb push_back #define int long long using namespace std; const int inf = 3e18; const int N = 1e6; int32_t main(){ ios_base::sync_with_stdio(0); cin.tie(0), cout.tie(0); int n, a, b; cin>>n>>a>>b; vector<int> l(n), r(n); for(int i = 0; i < n; i++){ cin>>l[i]>>r[i]; } bool big = 0; int gc = gcd(a, b+1); big |= (a > inf / gc / b); big |= (b > inf / gc / a); big |= (gc > inf / a / b); if(big){ int tot = 0; for(int i = 0; i < n; i++){ int len = r[i] - l[i] + 1; tot += len; } cout<<tot<<endl; return 0; } int per = a / gc * b; bool all = 0; vector<pair<int, int> > upd; set<int> ste; int add0 = 0; for(int i = 0; i < n; i++){ int df = (r[i] / per) - (l[i] / per); int lmod = l[i] % per; int rmod = r[i] % per; ste.insert(lmod); ste.insert(rmod+1); if(r[i] - l[i] + 1 >= per) all = 1; else if(df == 1){ add0++; } upd.pb({lmod, rmod+1}); } ste.insert(0); ste.insert(per); vector<int> vec; for(auto itr: ste){ vec.pb(itr); } vector<int> add(ste.size()); add[0] += add0; for(auto itr: upd){ auto l = lower_bound(vec.begin(), vec.end(), itr.first) - vec.begin(); auto r = lower_bound(vec.begin(), vec.end(), itr.second) - vec.begin(); add[l]++; add[r]--; } if(all){ cout<<per<<endl; } else{ int ans = 0, now = 0; for(int i = 0; i < vec.size()-1; i++){ now += add[i]; if(now > 0){ ans += vec[i+1] - vec[i]; } } cout<<ans<<endl; } 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...