제출 #1316069

#제출 시각아이디문제언어결과실행 시간메모리
1316069nguyenkhangninh99Inspections (NOI23_inspections)C++20
100 / 100
578 ms35620 KiB
#include <bits/stdc++.h> using namespace std; #define int long long multiset<array<int, 3>> s; map<int, int> mp; void paint(int l, int r, int val){ auto it1 = s.upper_bound({l, (int)1e9, (int)1e9}); it1--; auto it2 = s.upper_bound({r, (int)1e9, (int)1e9}); it2--; vector<array<int, 3>> add, del; auto it = it1; while(true){ if(it1 == it){ if((*it1)[0] < l) add.push_back({(*it1)[0], l - 1, (*it1)[2]}); } if(it2 == it){ if((*it2)[1] > r) add.push_back({r + 1, (*it2)[1], (*it2)[2]}); } del.push_back(*it); it++; if(it == s.end() || it == next(it2)) break; } add.push_back({l, r, val}); for(auto [x, y, time]: del){ if(time != -1e18) mp[val - time] += min(r, y) - max(x, l) + 1; s.erase({x, y, time}); } for(auto c: add) s.insert(c); } void solve(){ int n, m, q; cin >> n >> m >> q; s.insert({1, n, (int)-1e18}); int cur = 0; for(int i = 1; i <= m; i++){ int l, r; cin >> l >> r; paint(l, r, (cur + 1) - l); cur += (r - l + 1); } vector<pair<int, int>> v; for(auto [x, y]: mp) v.push_back({x, y}); vector<int> suf(v.size() + 1); for(int i = v.size() - 1; i >= 0; i--) suf[i] = suf[i + 1] + v[i].second; while(q--){ int k; cin >> k; cout << suf[upper_bound(v.begin(), v.end(), pair<int, int>{k, 1e18}) - v.begin()] << " "; } cout << "\n"; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); solve(); }
#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...