Submission #240423

#TimeUsernameProblemLanguageResultExecution timeMemory
240423valerikkStrange Device (APIO19_strange_device)C++11
25 / 100
5071 ms507708 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define int ll ll gcd(ll a, ll b) { while (b != 0LL) { a %= b; swap(a, b); } return a; } struct E { ll x; int k; ll l, r; bool operator<(const E& o) { return x < o.x || (x == o.x && k < o.k); } E() {} E(ll x, int k, ll l, ll r) : x(x), k(k), l(l), r(r) {} }; ll n, a, b; ll p; vector<E> v; void push(ll l, ll r, ll x, ll y) { v.emplace_back(l, 0, x, y); v.emplace_back(r+1, 1, x, y); } void add(ll l, ll r, ll x, ll y) { if (x <= y) { push(l, r, x, y); } else { push(l, r, 0LL, y); push(l, r, x, p-1LL); } } signed main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n >> a >> b; p = a/gcd(a, b+1); while (n--) { ll l, r; cin >> l >> r; ll x = l/b, y = r/b; if (x == y) { add(l%b, r%b, x%p, y%p); } else { if (y-x > 1) { add(0LL, b-1LL, (x+1LL)%p, (y-1LL)%p); } add(l%b, b-1LL, x%p, x%p); add(0LL, r%b, y%p, y%p); } } sort(v.begin(), v.end()); multiset<pair<ll, ll>> s; ll ans = 0; for (int i = 0; i+1 < v.size(); ++i) { if (v[i].k) { s.erase(s.find({v[i].l, v[i].r})); } else { s.insert({v[i].l, v[i].r}); } ll d = v[i+1].x-v[i].x; if (d) { vector<pair<ll, ll>> u; for (auto ss : s) { u.emplace_back(ss.first, -1); u.emplace_back(ss.second+1, 1); } sort(u.begin(), u.end()); ll q = 0; int bal = 0; for (int j = 0; j+1 < u.size(); ++j) { bal -= u[j].second; if (bal) q += u[j+1].first-u[j].first; } ans += q*d; } } cout << ans; return 0; }

Compilation message (stderr)

strange_device.cpp: In function 'int main()':
strange_device.cpp:70:25: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i+1 < v.size(); ++i) {
                     ~~~~^~~~~~~~~~
strange_device.cpp:86:33: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             for (int j = 0; j+1 < u.size(); ++j) {
                             ~~~~^~~~~~~~~~
#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...