Submission #405433

#TimeUsernameProblemLanguageResultExecution timeMemory
405433salehCircle selection (APIO18_circle_selection)C++17
12 / 100
1809 ms56116 KiB
#include <bits/stdc++.h> #define ft first #define sd second using namespace std; typedef pair<int, int> pii; const int MAXN = 300 * 1000 + 23; int n, x[MAXN], y[MAXN], r[MAXN], par[MAXN]; set<pii> ed, st; struct cmp { bool operator ()(int a, int b) const { return r[a] > r[b]? true: (r[a] == r[b]? a < b: false); } }; set<int, cmp> s; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr), cout.tie(nullptr); cin >> n; for (int i = 0; i < n; i++) { cin >> x[i] >> y[i] >> r[i]; if (y[i] != 0) return 0; y[i] = x[i] + r[i]; x[i] -= r[i]; st.insert({x[i], i}); ed.insert({y[i], i}); s.insert(i); } while (s.size()) { int a = *s.begin(); auto b = st.lower_bound({x[a], -1}); while (b != st.end() && b -> ft <= y[a]) { par[b -> sd] = a; s.erase(b -> sd); ed.erase({y[b -> sd], b -> sd}); b = st.erase(b); } b = ed.lower_bound({x[a], -1}); while (b != ed.end() && b -> ft <= y[a]) { par[b -> sd] = a; s.erase(b -> sd); st.erase({x[b -> sd], b -> sd}); b = ed.erase(b); } } for (int i = 0; i < n; i++) cout << par[i] + 1 << ' '; 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...
#Verdict Execution timeMemoryGrader output
Fetching results...