Submission #829959

#TimeUsernameProblemLanguageResultExecution timeMemory
829959FatihSolakCircle selection (APIO18_circle_selection)C++17
0 / 100
3078 ms180484 KiB
#include <bits/stdc++.h> #define N 300005 using namespace std; int x[N],y[N],c[N]; int ans[N]; int t[N]; void solve(){ int n; cin >> n; vector<int> ord; for(int i = 1;i<=n;i++){ cin >> x[i] >> y[i] >> c[i]; ord.push_back(i); } sort(ord.begin(),ord.end(),[&](int a,int b){ if(c[a] == c[b]) return a < b; return c[a] > c[b]; }); set<pair<long long,int>> s[3][3]; set<pair<long long,int>> s2[3][3][3]; set<int> alive; int cnt = 0; for(auto u:ord){ int num = -1; vector<int> cand; // for(auto xx:alive) // cand.push_back(xx); for(int i = -1;i<=1;i++){ for(int j = -1;j<=1;j++){ // for(int k = -1;k<=1;k++){ long long sum = 0; sum += i * x[u]; sum += j * y[u]; // sum += k * c[u]; auto it = s[i + 1][j + 1].lower_bound({sum,0}); if(it != s[i+1][j+1].end()){ cand.push_back(it->second); } if(it != s[i+1][j+1].begin()){ cand.push_back(prev(it)->second); } // } } } // for(int i = -1;i<=1;i++){ // for(int j = -1;j<=1;j++){ // for(int k = -1;k<=1;k++){ // long long sum = 0; // sum += (long long)i * x[u] * x[u]; // sum += (long long)j * y[u] * y[i]; // sum += (long long)k * c[u] * c[u]; // auto it = s2[i + 1][j + 1][k + 1].lower_bound({sum,0}); // if(it != s2[i+1][j+1][k+1].end()){ // cand.push_back(it->second); // } // if(it != s2[i+1][j+1][k+1].begin()){ // cand.push_back(prev(it)->second); // } // } // } // } for(auto cc:cand){ long long val1 = (long long)(c[u] + c[cc]) *(c[u] + c[cc]); long long val2 = (long long)(x[u] - x[cc]) *(x[u] - x[cc]) + (long long)(y[u] - y[cc]) *(y[u] - y[cc]); if(val2 <= val1){ if(num == -1 || t[u] < t[num]) num = cc; } } if(num == -1){ alive.insert(u); t[u] =cnt++; ans[u] = u; for(int i = -1;i<=1;i++){ for(int j = -1;j<=1;j++){ // for(int k = -1;k<=1;k++){ long long sum = 0; sum += i * x[u]; sum += j * y[u]; // sum += k * c[u]; s[i + 1][j + 1].insert({sum,u}); // } } } // for(int i = -1;i<=1;i++){ // for(int j = -1;j<=1;j++){ // for(int k = -1;k<=1;k++){ // long long sum = 0; // sum += (long long)i * x[u] * x[u]; // sum += (long long)j * y[u] * y[i]; // sum += (long long)k * c[u] * c[u]; // s2[i + 1][j + 1][k + 1].insert({sum,u}); // } // } // } } else ans[u] = num; } for(int i = 1;i<=n;i++){ cout << ans[i] << ' '; } } int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); #ifdef Local freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif int t = 1; //cin >> t; while(t--){ 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...
#Verdict Execution timeMemoryGrader output
Fetching results...