Submission #725402

#TimeUsernameProblemLanguageResultExecution timeMemory
725402SanguineChameleonGame (APIO22_game)C++17
60 / 100
4082 ms43496 KiB
#pragma GCC optimize("Ofast,unroll-loops") #pragma GCC target("avx2,popcnt,lzcnt,abm,bmi,bmi2,fma") #include "game.h" #include <bits/stdc++.h> using namespace std; const int maxN = 3e5 + 20; int max_in[maxN]; int min_out[maxN]; vector<int> adj1[maxN]; vector<int> adj2[maxN]; bool done = false; int n, k; int cnt; void init(int _n, int _k) { n = _n; k = _k; if (1LL * n * k > 1e9) { assert(k == 150000); } for (int i = 0; i < k; i++) { max_in[i] = i; min_out[i] = i + 1; } for (int i = k; i < n; i++) { max_in[i] = 0; min_out[i] = k + 1; } } void update_in(int u, int val); void update_out(int u, int val); void update_in(int u, int val) { if (done) { return; } if (val <= max_in[u]) { return; } cnt++; bool update = ((max_in[u] >> 9) < (val >> 9) || (max_in[u] >> 9) == (min_out[u] >> 9)); max_in[u] = val; if (max_in[u] >= min_out[u]) { done = true; return; } if (update) { for (auto v: adj1[u]) { update_in(v, max_in[u]); } for (auto v: adj2[u]) { update_out(v, min_out[u]); } } } void update_out(int u, int val) { if (done) { return; } if (val >= min_out[u]) { return; } cnt++; bool update = ((min_out[u] >> 9) > (val >> 9) || (max_in[u] >> 9) == (min_out[u] >> 9)); min_out[u] = val; if (max_in[u] >= min_out[u]) { done = true; return; } if (update) { for (auto v: adj1[u]) { update_in(v, max_in[u]); } for (auto v: adj2[u]) { update_out(v, min_out[u]); } } } int add_teleporter(int u, int v) { update_in(v, max(max_in[u], (u < k ? u + 1 : 0))); update_out(u, min_out[v]); adj1[u].push_back(v); adj2[v].push_back(u); return done; }
#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...