#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5e5 + 11;
int n, k;
int was[MAXN], good[MAXN], t[4 * MAXN];
vector < int > g[MAXN], a[MAXN];
void upd(int k, int x, int v = 1, int l = 0, int r = n - 1){
if(l == r){ t[v] += x; return; }
int md = (l + r) / 2;
if(k <= md) upd(k, x, v + v, l, md);
else upd(k, x, v + v + 1, md + 1, r);
t[v] = max(t[v + v], t[v + v + 1]);
}
int get(int tl, int tr, int v = 1, int l = 0, int r = n - 1){
if(r < tl || tr < l) return 0;
if(tl <= l && r <= tr) return t[v];
int md = (l + r) / 2;
return max(get(tl, tr, v + v, l, md), get(tl, tr, v + v + 1, md + 1, r));
}
void dfs(int v){
if(!was[v]) upd(v, 1), was[v] = 1;
for(int u : g[v])
if(!was[u])
dfs(u);
}
void rfs(int v){
if(!good[v]) upd(v, 1), good[v] = 1;
for(int u : a[v])
if(!good[u])
rfs(u);
}
void init(int _n, int _k) {
n = _n, k = _k;
for(int i = 0; i < k - 1; i++) g[i].push_back(i + 1);
for(int i = 0; i < k; i++) was[i] = 1, upd(i, 1);
}
int add_teleporter(int u, int v){
if(u >= v && u < k) return 1;
if(u >= k && v < k && !good[u]) good[u] = 1, upd(u, 1);
g[u].push_back(v), a[v].push_back(u);
if(was[u]) dfs(u);
if(good[u]) rfs(u);
return get(k, n - 1) > 1;
}
# | 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... |