Submission #1264061

#TimeUsernameProblemLanguageResultExecution timeMemory
1264061VMaksimoski008The Potion of Great Power (CEOI20_potion)C++20
17 / 100
3092 ms12960 KiB
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
const int B = 100;

int n, D, h[N], a[N], b[N], m;

void init(int _N, int _D, int H[]) {
    n = _N;
    D = _D;
    for(int i=0; i<n; i++) h[i] = H[i];
}   

void curseChanges(int U, int A[], int B[]) {
    m = U;
    for(int i=0; i<m; i++) {
        a[i] = A[i];
        b[i] = B[i];
        if(a[i] > b[i]) swap(a[i], b[i]);
    }
}

int question(int x, int y, int v) {
    int ans = 1e9;
    set<pair<int, int> > st;

    for(int i=0; i<v; i++) {
        if(st.count({ a[i], b[i] })) {
            st.erase({ a[i], b[i] });
        } else {
            st.insert({ a[i], b[i] });
        }
    }

    vector<int> L, R;
    for(auto [u, v] : st) {
        if(u == x || v == x) L.push_back(h[u^v^x]);
        if(u == y || v == y) R.push_back(h[u^v^y]);
    }

    if(L.empty() || R.empty()) return 1e9;
    sort(L.begin(), L.end());
    sort(R.begin(), R.end());

    int j = 0;
    for(int i=0; i<R.size(); i++) {
        while(j+1 < L.size() && L[j+1] <= R[i]) j++;
        ans = min(ans, abs(L[j] - R[i]));
    }

    j = L.size() - 1;
    for(int i=R.size()-1; i>=0; i--) {
        while(j && L[j-1] >= R[i]) j--;
        ans = min(ans, abs(L[j] - R[i]));
    }

    return ans;
}
#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...