Submission #546753

#TimeUsernameProblemLanguageResultExecution timeMemory
546753MonarchuwuNew Home (APIO18_new_home)C++17
12 / 100
5102 ms57516 KiB
#include<iostream> #include<algorithm> #include<vector> #include<set> using namespace std; typedef long long ll; const int N = 3e5 + 7, inf = 1e9 + 7; int n, k, q, cnt; struct Data { int x, type, time, op; Data() {} Data(int x, int type, int time, int op) : x(x), type(type), time(time), op(op) {} bool operator < (const Data &o) const { if (time != o.time) return time < o.time; return op > o.op; } } a[N * 3]; multiset<int> s[N]; int ans[N]; void solve() { for (int i = 1, id; i <= cnt; ++i) { id = a[i].type; if (a[i].op == 1) s[id].insert(a[i].x); else if (a[i].op == -1) s[id].erase(s[id].find(a[i].x)); else { for (int j = 1; j <= k; ++j) { if (s[j].empty()) { ans[id] = -1; break; } int dist(inf); multiset<int>::iterator it = s[j].lower_bound(a[i].x); if (it != s[j].end()) dist = min(dist, *it - a[i].x); if (it != s[j].begin()) dist = min(dist, a[i].x - *(--it)); ans[id] = max(ans[id], dist); } } } for (int i = 0; i < q; ++i) cout << ans[i] << '\n'; } int main() { cin.tie(NULL)->sync_with_stdio(false); cin >> n >> k >> q; for (int i = 0, x, t, l, r; i < n; ++i) { cin >> x >> t >> l >> r; a[++cnt] = Data(x, t, l, 1); a[++cnt] = Data(x, t, r, -1); } for (int i = 0; i < q; ++i) { int l, y; cin >> l >> y; a[++cnt] = Data(l, i, y, 0); } sort(a + 1, a + cnt + 1); solve(); } /** /\_/\ * (= ._.) * / >0 \>1 **/
#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...