# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
966361 | anton | The Potion of Great Power (CEOI20_potion) | C++17 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int, int>
typedef complex<int> point;
const int INF = 1e9;
int dist(vector<int>& a,int aid, vector<int>& b, int bid){
if(a.size() == 0 || b.size() == 0){
return INF;
}
int ia =0, ib = 0;
int res= abs(a[0]-b[0]);
while(ia<a.size()-1 || ib<b.size()-1){
if(ia==a.size()-1){
ib++;
}
else if(ib==b.size()-1){
ia++;
}
else if(a[ia]<=b[ib]){
ia++;
}
else{
ib++;
}
res = min(res, abs(a[ia]-b[ib]));
}
return res;
}
vector<vector<int>> vs;
vector<int> h;
set<pii> cur;
int n;
void init(int N, int D, int H[]) {
vs.resize(N);
h.resize(N);
for(int i = 0; i<N; i++){
h[i] = H[i];
}
n= N;
}
void curseChanges(int U, int A[], int B[]) {
for(int i = 0; i<U; i++){
int a= A[i], b= B[i];
if(cur.find({a, b})!=cur.end()){
cur.erase({a, b});
}
else{
cur.insert({a, b});
}
}
for(auto e: cur){
vs[e.first].push_back(h[e.second]);
vs[e.second].push_back(h[e.first]);
}
for(int i = 0; i<n; i++){
sort(vs[i].begin(), vs[i].end());
}
}
int question(int x, int y, int v) {
return dist(vs[x],x vs[y], y);
}