Submission #1235624

#TimeUsernameProblemLanguageResultExecution timeMemory
1235624MatthewwwwCircle selection (APIO18_circle_selection)C++17
0 / 100
640 ms357188 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define f first #define s second #ifdef LOCAL #define freopen(...) "i miss you" #define err cerr #else #define err if (0) cerr #endif struct Sgt { int tl, tr, val = -1; Sgt *lft = nullptr, *rht = nullptr; Sgt (int l, int r): tl(l), tr(r) {} void push() { if (!lft) { int tm = tl+tr>>1; lft = new Sgt(tl, tm); rht = new Sgt(tm, tr); } } void update (int l, int r, int v) { if (l >= tr || tl >= r) return; if (l <= tl && r >= tr) { val = v; return; } push(); lft->update(l, r, v); rht->update(l, r, v); } int query (int i) { if (tl == tr-1) return val; push(); return max(val, (i < lft->tr ? lft : rht)->query(i)); } }; int d2 (pair<int, int> a, pair<int, int> b) { return (a.f-b.f)*(a.f-b.f)+(a.s-b.s)*(a.s-b.s); } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; vector<pair<pair<int, int>, int>> vt(n); for (auto &i: vt) cin >> i.f.f >> i.f.s >> i.s; vector<int> ord(n); iota(ord.begin(), ord.end(), 0); sort(ord.begin(), ord.end(), [&](int a, int b) { if (vt[a].s-vt[b].s) return vt[a].s > vt[b].s; return a < b;}); vector<int> ans(n, -1); Sgt sgt(0, 1e9+9); for (int i: ord) { int a = sgt.query(vt[i].f.f-vt[i].s), b = sgt.query(vt[i].f.f+vt[i].s); if (a > b) swap(a, b); if (!~a) { if (~b) ans[i] = b; else { sgt.update(vt[i].f.f-vt[i].s, vt[i].f.f+vt[i].s+1, i); ans[i] = i; } } else if (vt[a].s >= vt[b].s) ans[i] = a; else ans[i] = b; } for (int i: ans) cout << i+1 << " "; } // no llama :(
#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...