Submission #240380

#TimeUsernameProblemLanguageResultExecution timeMemory
240380valerikk이상한 기계 (APIO19_strange_device)C++14
10 / 100
5064 ms524292 KiB
#include<bits/stdc++.h> using namespace std; #define sz(x) ((int) (x).size()) typedef long long ll; int calc(multiset<pair<ll, ll>> seg) { vector<pair<ll, ll>> events; for (auto [l, r] : seg) { events.emplace_back(l, 1); events.emplace_back(r + 1, -1); } sort(events.begin(), events.end()); ll res = 0; int cnt = 0; for (int i = 0; i + 1 < events.size(); i++) { cnt += events[i].second; if (cnt > 0) res += events[i + 1].first - events[i].first; } return res; } int gcd(int a, int b) { while (b != 0) { a %= b; swap(a, b); } return a; } struct Event { ll x; int type; ll pl, pr; Event() {} Event(ll x, int type, ll pl, ll pr) : x(x), type(type), pl(pl), pr(pr) {} }; bool operator<(Event a, Event b) { return a.x < b.x || (a.x == b.x && -a.type < -b.type); } signed main() { ios::sync_with_stdio(false); cin.tie(0); int n; ll a, b; cin >> n >> a >> b; ll p = a / gcd(a, b + 1); vector<Event> events; auto add = [&] (ll l, ll r, ll pl, ll pr) { events.emplace_back(l, 1, pl, pr); events.emplace_back(r + 1, -1, pl, pr); }; auto add_safe = [&] (ll l, ll r, ll pl, ll pr) { if (pl > pr) { add(l, r, 0, pr); add(l, r, pl, p - 1); } else add(l, r, pl, pr); }; while (n--) { ll l, r; cin >> l >> r; ll L = l / b, R = r / b; if (L == R) add_safe(l % b, r % b, L % p, R % p); else { if (L + 1 < R) add_safe(0, b - 1, (L + 1) % p, (R - 1) % p); add_safe(l % b, b - 1, L % p, L % p); add_safe(0, r % b, R % p, R % p); } } sort(events.begin(), events.end()); multiset<pair<ll, ll>> seg; ll ans = 0; for (int i = 0; i + 1 < sz(events); ++i) { if (events[i].type == 1) seg.insert({events[i].pl, events[i].pr}); else seg.erase(seg.find({events[i].pl, events[i].pr})); ll diff = events[i + 1].x - events[i].x; if (diff != 0) ans += calc(seg) * diff; } cout << ans; return 0; }

Compilation message (stderr)

strange_device.cpp: In function 'int calc(std::multiset<std::pair<long long int, long long int> >)':
strange_device.cpp:10:15: warning: decomposition declaration only available with -std=c++1z or -std=gnu++1z
     for (auto [l, r] : seg) {
               ^
strange_device.cpp:17:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i + 1 < events.size(); i++) {
                     ~~~~~~^~~~~~~~~~~~~~~
#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...