#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5e5 + 11;
int n, k, ok;
int was[MAXN], r[MAXN], l[MAXN];
vector < int > g[MAXN], rg[MAXN];
void init(int _n, int _k) {
    n = _n + 1, k = _k + 1;
    for(int i = 0; i < k; i++) l[i] = i, r[i] = i + 1;
    for(int i = k; i < n; i++) l[i] = 0, r[i] = k;
}
bool c(int a);
bool f(int a, int b){
    if(r[a] <= l[b]) return 0;
    if(l[a] >= r[b]) return 1;
    if(l[a] == l[b] && r[a] == r[b]) return 0;
    if((l[a] + r[a]) / 2 >= r[b]){
        r[a] = (l[a] + r[a]) / 2;
        return c(b);
    }
    else if(l[a] >= (l[b] + r[b]) / 2){
        l[b] = (l[b] + r[b]) / 2;
        return c(a);
    }
    return 0;
}
bool c(int a){
    for(int b : rg[a])
        if(f(b, a))
            return 1;
    for(int b : g[a]){
        if(f(a, b))
            return 1;
    }
    return 0;
}
int add_teleporter(int u, int v){
    u++, v++; 
    if(v < k) v--;
    g[u].push_back(v), rg[v].push_back(u); 
    if(f(u, v)) return 1;
    else return 0;
}
| # | 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... |