Submission #1200516

#TimeUsernameProblemLanguageResultExecution timeMemory
1200516ofozInspections (NOI23_inspections)C++20
0 / 100
0 ms328 KiB
#include <bits/stdc++.h> #define int long long using namespace std; #define pi pair<int, int> #define ppi pair<pair<int, int>, int> #define vi vector<int> void solve() { int n, m, q; cin >> n >> m >> q; int s = 0; vector<ppi> pairs; for (int i = 0; i < m; i++) { int l, r; cin >> l >> r; pairs.push_back({{l, r}, s}); s += (r-l+1); } vector<pi> queries(q); int x; for (int i = 0; i < q; i++) { cin >> x; queries[i] = {x, i}; } sort(pairs.rbegin(), pairs.rend()); map<int, int> mx; set<pi> cur; multiset<pi> end; int t = 0; int start = 0; int left = 0; for (int i = 1; i <= n; i++) { t++; while (!pairs.empty() && pairs.back().first.first <= i) { cur.insert({pairs.back().second - i + 1, t}); end.insert({pairs.back().first.second, pairs.back().second - i + 1}); pairs.pop_back(); auto it = cur.lower_bound({pairs.back().second - i + 1, t}); if (it == cur.begin() || it == prev(cur.end(), 1)) continue; auto prv = prev(it, 1); auto nxt = next(it, 1); int maxm = max(prv->second, nxt->second); int diff = nxt->first - prv->first; mx[diff] += (t - maxm); start += (t - maxm); } while (!end.empty() && end.begin()->first < i) { auto it = cur.upper_bound({end.begin()->second, -1}); if (it != cur.begin()) { auto prv = prev(it, 1); int maxm = max(prv->second, it->second); int diff = it->first - prv->first; mx[diff] += (t - maxm); start += (t - maxm); } if (it != prev(cur.end(), 1)) { auto nxt = next(it, 1); int maxm = max(nxt->second, it->second); int diff = nxt->first - it->first; mx[diff] += (t - maxm); start += (t - maxm) + 1; } cur.erase(it); end.erase(end.begin()); } if (cur.size() < 2) { continue; } left++; } vector<int> res(q); sort(queries.begin(), queries.end()); int j = 0; int c = start; for (pi p : mx) { while (j < q && queries[j].first < p.first) { res[queries[j].second] = c; j++; continue; } c -= p.second; if (j >= q) break; if (p.first > queries[j].first) continue; res[queries[j].second] = c; } for (int x : res) cout << x << ' '; } /* iterate through each machine i. how do we process the events? for each l, we insert the number of days s into the set for each r, we erase the number of days */ signed main() { solve(); 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...