제출 #1199582

#제출 시각아이디문제언어결과실행 시간메모리
1199582just새 집 (APIO18_new_home)C++20
0 / 100
5096 ms63516 KiB
#include "bits/stdc++.h" #include <climits> #include <queue> using namespace std; #define int long long #define vec vector #define all(x) (x).begin(), (x).end() using quad = tuple<int, int, int, int>; using trip = tuple<int, int, int>; int n, k, q; vec<vec<trip>> stores; vec<trip> queries; // { year, location }; signed main() { priority_queue<quad, vec<quad>, greater<quad>> to_add, to_rem; cin >> n >> k >> q; stores.resize(k); for(int i = n; i--; ) { int x, t, a, b; cin >> x >> t >> a >> b; t--; stores[t].emplace_back(x, a, b); to_add.push({a, b, x, t}); } queries.resize(q); int i = 0; for(auto &[year, loc, idx]: queries) { idx = i; i++; cin >> loc >> year; } sort(all(queries)); vec<multiset<int>> cur(k); vec<int> ans(q); for(auto [year, loc, idx]: queries) { while(to_add.size()) { auto [a, b, x, t] = to_add.top(); if (a > year) break; cur[t].insert(x); to_rem.push({b, a, x, t}); to_add.pop(); } while(to_rem.size()) { auto [b, a, x, t] = to_rem.top(); if (b >= year) break; cur[t].erase(cur[t].find(x)); to_rem.pop(); } int mx_dist = 0; for(int t = 0; t < k; t++) { if (cur[t].empty()) mx_dist = INT_MAX; else { auto it = cur[t].lower_bound(loc); if (it != cur[t].end()) mx_dist = max(mx_dist, abs(*it - loc)); if (it != cur[t].begin()) { it = prev(it); mx_dist = max(mx_dist, abs(*it - loc)); } } } ans[idx] = mx_dist == INT_MAX ? -1 : mx_dist; } for(int x: ans) cout << x << "\n"; }
#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...