이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "game.h"
#ifdef hollwo_pelw_local
#include "grader.cpp"
#endif
#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 5;
int n, k, tl[N], tr[N], res = 0;
vector<int> gi[N], go[N];
void init(int _n, int _k) {
n = _n, k = _k;
for (int i = 0; i < k; i++)
tl[i] = tr[i] = i;
for (int i = k; i < n; i++)
tl[i] = tr[i] = i;
for (int i = k; i < n; i++)
tl[i] = -1, tr[i] = k;
}
inline int mid(int u) {
return tl[u] + (tr[u] - tl[u]) / 2; // (tl[u] + tr[u]) / 2;
}
inline void debug(int u) {
cout << "[" << tl[u] << ", " << mid(u) << "] -> " << u << " -> [" << mid(u) << ", " << tr[u] << "]" << endl;
}
inline int update(int u, int v) {
if (tr[u] <= tl[v]) return 0;
if (tl[u] >= tr[v]) return 1;
// debug(u);
// debug(v);
while (mid(v) < tl[u]) {
// cout << "UPDaTE " << v << endl;
// debug(v);
tl[v] = mid(v) + 1;
for (int x : go[v])
if (update(v, x)) return 1;
}
while (mid(u) >= tr[v]) {
// cout << "UpdAte " << u << endl;
// debug(u);
tr[u] = mid(u);
for (int x : gi[u])
if (update(x, u)) return 1;
}
return 0;
}
int add_teleporter(int u, int v) {
if (v <= u && u < k)
return 1;
if (u == v) return 0;
// cout << "ADD " << u << " -> " << v << endl;
go[u].push_back(v);
gi[v].push_back(u);
return update(u, v);
}
# | 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... |