Submission #677775

#TimeUsernameProblemLanguageResultExecution timeMemory
677775parsadox2Strange Device (APIO19_strange_device)C++14
100 / 100
864 ms115796 KiB
#include <bits/stdc++.h> #define pb push_back #define F first #define S second #define debug(x) cout << #x << "= " << x << ", " #define ll long long #define fast ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) #define SZ(x) (int) x.size() #define int long long using namespace std; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); const int maxn = 1e6 + 10 , inf = 1e18; int n , A , B , l[maxn] , r[maxn]; set <pair <int , int> > st; int gcd(int a , int b) { if(b == 0) return a; return gcd(b , a % b); } void add (int L , int R) { if(st.empty()) { st.insert(make_pair(L , R)); return; } auto it = st.upper_bound({L , L}); if(it != st.begin()) it--; auto v = *it; if(v.S < L) it++; if(it == st.end()) { st.insert({L , R}); return; } auto u = *it; L = min(u.F , L); vector <pair <int, int>> vec; while(u.F <= R) { vec.pb(u); it++; if(it == st.end()) break; u = *it; } if(!vec.empty()) { R = max(R , vec.back().S); } for(auto u : vec) st.erase(u); st.insert({L , R}); } int32_t main() { fast; cin >> n >> A >> B; int S = 0; for(int i = 0 ; i < n ; i++) { cin >> l[i] >> r[i]; S += r[i] - l[i] + 1; } int g = gcd(A , B + 1); A /= g; if(inf / A < B) { cout << S << endl; return 0; } A *= B; for(int i = 0 ; i < n ; i++) { int tmp = l[i] / A; tmp = tmp * A; l[i] -= tmp; r[i] -= tmp; add(l[i] , min(r[i] , A - 1)); if(r[i] >= A) { r[i] -= A; add(0 , min(A - 1 , r[i])); } } int ans = 0; for(auto u : st) { ans += u.S - u.F + 1; } 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...