Submission #1159320

#TimeUsernameProblemLanguageResultExecution timeMemory
1159320KalashnikovThe Potion of Great Power (CEOI20_potion)C++20
0 / 100
181 ms327680 KiB
#include <bits/stdc++.h>
using namespace std;

const int INF = 1e9;

int N, D, U;
vector<int> H;
vector<pair<int, int>> trust_changes;
vector<unordered_set<int>> trust_graph;
vector<vector<unordered_set<int>>> trust_history;

void init(int N_, int D_, int H_[]) {
    N = N_; D = D_;
    H.assign(H_, H_ + N);
    trust_graph.assign(N, {});
    trust_history.push_back(trust_graph);
}

void curseChanges(int U_, int A[], int B[]) {
    U = U_;
    trust_changes.resize(U);
    trust_history.reserve(U + 1);
    
    for (int i = 0; i < U; i++) {
        int a = A[i], b = B[i];
        trust_changes[i] = {a, b};
        if (trust_graph[a].count(b)) {
            trust_graph[a].erase(b);
            trust_graph[b].erase(a);
        } else {
            trust_graph[a].insert(b);
            trust_graph[b].insert(a);
        }
        trust_history.push_back(trust_graph);
    }
}

int question(int X, int Y, int V) {
    auto &graph = trust_history[V];
    
    if (graph[X].empty() || graph[Y].empty()) return INF;
    
    int min_dist = INF;
    for (int x_prime : graph[X]) {
        for (int y_prime : graph[Y]) {
            if (x_prime == y_prime) return 0;
            min_dist = min(min_dist, abs(H[x_prime] - H[y_prime]));
        }
    }
    return min_dist;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...