Submission #1044677

#TimeUsernameProblemLanguageResultExecution timeMemory
1044677Onur_IlgazStrange Device (APIO19_strange_device)C++17
0 / 100
164 ms456 KiB
#include <bits/stdc++.h> #define fast cin.tie(0)->sync_with_stdio(0); #define inf ((int)1e18) using namespace std; const long long C = inf * 2; struct segtree { long long n; struct node { long long sum; int l, r; bool set; node(): sum(0), l(0), r(0), set(false) {} }; vector <node> t; int newnode() { t.push_back(node()); return t.size() - 1; } void init(long long size) { n = size; newnode(); } void set(long l, long r) { return update(0, 0, n - 1, l, r); } void update(int v, long long l, long long r, long long ul, long long ur) { if(l >= ul and r <= ur) { t[v].sum = (r - l + 1); t[v].set = 1; return; } if(t[v].set) return; if(!t[v].l) { t[v].l = newnode(); t[v].r = newnode(); } long long m = (l + r) / 2; if(ul <= m) update(t[v].l, l, m, ul, ur); if(ur > m) update(t[v].r, m + 1, r, ul, ur); t[v].sum = t[t[v].l].sum + t[t[v].r].sum; } }t; int32_t main(){ fast int n, a, b; cin >> n >> a >> b; __int128__ g = gcd(a, b + 1); __int128__ mult = (__int128__)a * (b + 1); if(mult / g > C) { long long sum = 0; for(int i = 0; i < n; i++) { long long l, r; cin >> l >> r; sum += r - l + 1; } cout << sum; return 0; } long long tekrar = mult / g / (b + 1) * b; t.init(tekrar); for(int i = 0; i < n; i++) { long long l, r; cin >> l >> r; if(r - l + 1 >= tekrar) { cout << tekrar; return 0; } long long ll = l % tekrar, rr = r % tekrar; if(ll <= rr) { t.set(ll, rr); // cout << ll << " " << rr << "\n"; } else { // cout << 0 << " " << rr << "\n"; t.set(0, rr); // cout << ll << " " << tekrar - 1 << "\n\n"; t.set(ll, tekrar - 1); } } cout << t.t[0].sum; }
#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...