제출 #982764

#제출 시각아이디문제언어결과실행 시간메모리
982764vjudge1게임 (APIO22_game)C++17
100 / 100
1563 ms69700 KiB
// hola soy Dember :D
// 31/03/2024

#include <bits/stdc++.h>

#define ll long long
#define pll pair<ll,ll>
#define F first
#define S second 
#define Z size()
#define pb push_back
#define bp pop_back
#define fo(x,y,z) for(ll x=y; x<=z; x++)
#define of(x,y,z) for(ll x=y; x>=z; x--)
#define all(n) n.begin(), n.end()
#define arr(x,y,z) x+y, x+y+z
#define dd double

using namespace std;

const ll MN=300005;
ll n, k, xd, l[MN], r[MN], sevennationarmy[MN];
vector<ll> x[MN], y[MN];
 
void dfs(ll u){
    if(xd)return;
    if(r[u]<=l[u]){xd=1; return;}
    
    if (sevennationarmy[u]>__lg(l[u]^r[u]))sevennationarmy[u]=__lg(l[u]^r[u]); 
    else return;
    
    for(ll v:x[u])l[v]=max(l[v], l[u]), dfs(v);
    for(ll v:y[u])r[v]=min(r[v], r[u]), dfs(v);
}
 
void init(int N, int K){
    n=N, k=K;
    
    fo(i,0,k-1)l[i]=i, r[i]=i+1;
    fo(i,k,n-1)l[i]=-1, r[i]=k;
    fo(i,0,n-1)sevennationarmy[i]=__lg(l[i]^r[i]);
    
    return;
}
int add_teleporter(int u, int v){
    x[u].pb(v), y[v].pb(u);
    l[v]=max(l[v], max(l[u], ((u<k)?u:-1)+0ll)), dfs(v);
    r[u]=min(r[u], min(r[v], ((v<k)?v:k) +0ll)), dfs(u);
    return xd;
}
#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...