제출 #979996

#제출 시각아이디문제언어결과실행 시간메모리
979996avita게임 (APIO22_game)C++17
100 / 100
1261 ms64520 KiB
#include "game.h"
#include<bits/stdc++.h>
using namespace std;
 
const int maxn=300005;
int n, k, ok, l[maxn], r[maxn], layer[maxn];
vector <int> A[maxn], At[maxn];
 
void propagate(int u)
{
    if (ok) return;
    if (r[u]<=l[u]) return ok=1, void();
    int j=__lg(l[u]^r[u]);
    if (layer[u]>j) layer[u]=j; 
    else return;
    for (int v:A[u]) l[v]=max(l[v], l[u]), propagate(v);
    for (int v:At[u]) r[v]=min(r[v], r[u]), propagate(v);
}
 
int add_teleporter(int u, int v)
{
    A[u].push_back(v), At[v].push_back(u);
    l[v]=max(l[v], max(l[u], u<k?u:-1)), propagate(v);
    r[u]=min(r[u], min(r[v], v<k?v:k)), propagate(u);
    return ok;
}
 
void init(int N, int K)
{
    n=N, k=K;
    for (int i=0; i<k; i++) l[i]=i, r[i]=i+1;
    for (int i=k; i<n; i++) l[i]=-1, r[i]=k;
    for (int i=0; i<n; i++) layer[i]=__lg(l[i]^r[i]);
}
/*int main()
{
    
}*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...