제출 #1349931

#제출 시각아이디문제언어결과실행 시간메모리
1349931alish_1게임 (APIO22_game)C++20
2 / 100
1 ms3468 KiB
#include <bits/stdc++.h>
#include "game.h"
#define ll long long
#define ull unsigned long long
#define pb push_back
#define sln cout << "\n";
#define sz(x) (int)(x.size())
#define s second
#define ld long double
#define f first
#define pt complex <ld>
#define cyes cout << "YES\n";
#define cno cout << "NO\n";
#define bitcount __builtin_popcountll
#define IOS ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#pragma comment (linker, "/stack:200000")

#pragma GCC optimize ("Ofast")
#pragma GCC optimize ("unswitch-loops")
#pragma GCC target ("avx2")

//#pragma GCC optimize("O3, unroll-loops, Ofast")
//#pragma GCC target("avx, avx2, fma")
//#pragma GCC optimize("no-exceptions")
//#pragma GCC optimize("no-rtti")
//#pragma GCC optimize("stack-reuse=all")


//#define int ll //__int128_t
#define lll __int128_t
using namespace std;
const ll mod = 1e9 + 7;
ld pi = acos(-1);
ll inf = (ll)1e18;
ll binpow (ll n, ll s) {
    n %= mod;
    ll t = n;
    ll ans = 1LL;
    while (s > 0LL) {
        if ((s & 1)) {
            ans = (ans * t) % mod;
        }
        t = (t * t) % mod;
        s = (s >> 1LL);
    }
    return ans;
}
int lg (ll n) {
    return 63 - __builtin_clzll(n);
}
ll lcm (ll a, ll b) {
    return (a * b / __gcd (a, b));
}
int n, k;
const int n1 = 30000;
set <pair <int, int>> g[n1 + 1];
set <pair <int, int>> g1[n1 + 1];
vector <int> mx(n1 + 1, -1);
vector <int> mn(n1 + 1, n1 + 1);

void init (int n1, int k1) {
    n = n1;
    k = k1;
}
bool f = 0;
void dfsmx (int v) {
    if (mx[v] >= mn[v]) {
        f = 1;
        return;
    }
    vector <int> upd;
    for (auto t : g[v]) {
        if (t.f < mx[v]) {
            upd.pb (t.s);
        }
        else {
            break;
        }
    }
    for (auto u : upd) {
        g[v].erase ({-mx[u], u});
        mx[u] = mx[v];
        g[v].insert ({-mx[u], u});
    }
    for (auto u : upd) dfsmx (u);
}
void dfsmn (int v) {
    if (mx[v] >= mn[v]) {
        f = 1;
        return;
    }
    vector <int> upd;
    for (auto t : g1[v]) {
        if (-t.f > mn[v]) {
            upd.pb (t.s);
        }
        else {
            break;
        }
    }
    for (auto u : upd) {
        g1[v].erase ({-mn[u], u});
        mn[u] = mn[v];
        g1[v].insert ({-mn[u], u});
    }
    for (auto u : upd) dfsmn (u);
}
int add_teleporter(int v, int u) {
    if (v < k && u < k && v >= u) return 1;
    if (v < k && u < k) return 0;
    if (v == u) return 0;
    g1[u].insert ({-mn[v], v});
    g[v].insert ({mx[u], u});
    if (v < k) {
        mx[u] = max (v, mx[u]);
    }
    dfsmx (v);

    if (u < k) {
        mn[v] = min (mn[v], u);
    }
    dfsmn (u);
    for (int i = 0; i < 6; i ++) {
        cout << i << ' ' << mn[i] << ' ' << mx[i] << '\n';
    }
    if (f) {
        return 1;
    }
    return 0;
}
/*
()(())

(())()()

g++ grader.cpp problem.cpp -o program.exe -std=c++17
program.exe

-1 1 -1 -1 1 -1

-1 1 -1 1 -1 1 -1 -1



0 1 2 3 4
32
0 1 2 3 4
0 1 2 4 3
0 1 4 2 3
1 0 0 1 0 0 1 0












6 4
1 2 4 3 5 6
1 2 3 4 5 6





















((()))()()


*/
#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...