# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
571596 | Cross_Ratio | 원 고르기 (APIO18_circle_selection) | C++14 | 694 ms | 56736 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#define int long long
using namespace std;
typedef pair<int,int> P;
int X[300005];
int Y[300005];
int R[300005];
int ans[300005];
bool used[300005];
signed main() {
cin.sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int N;
cin >> N;
int i, j;
for(i=0;i<N;i++) cin >> X[i] >> Y[i] >> R[i];
priority_queue<P> PQ;
set<P> S1, S2;
for(i=0;i<N;i++) {
S1.insert(P(X[i]+R[i],i));
S2.insert(P(X[i]-R[i],i));
PQ.push(P(R[i],-i));
ans[i] = -1;
}
while(true) {
int id = -1;
while(!PQ.empty()) {
P k = PQ.top();
PQ.pop();
if(!used[-k.second]) {
id = -k.second;
break;
}
}
if(id==-1) break;
auto it1 = S1.lower_bound(P(X[id]-R[id],0));
while(it1 != S1.end()&&it1->second <= X[id] + R[id]) {
ans[it1->second] = (ans[it1->second]==-1?id : ans[it1->second]);
used[it1->second] = true;
auto it2 = it1;
it1++;
S1.erase(it2);
}
it1 = S2.lower_bound(P(X[id]-R[id],0));
while(it1 != S2.end()&&it1->second <= X[id] + R[id]) {
ans[it1->second] = (ans[it1->second]==-1?id : ans[it1->second]);
used[it1->second] = true;
auto it2 = it1;
it1++;
S2.erase(it2);
}
}
for(i=0;i<N;i++) cout << ans[i]+1 << ' ';
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |