제출 #1159227

#제출 시각아이디문제언어결과실행 시간메모리
1159227aligay100infaThe Potion of Great Power (CEOI20_potion)C++20
14 / 100
2954 ms32536 KiB
// #pragma GCC optimize("O3,unroll-loops")
// #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#include <bits/stdc++.h>
#define len(x) (int)x.size()

using namespace std;

namespace {
    const int N = 2e5 + 3;
    int n, d, m, h[N], a[N], b[N];
    set <int> s[N];

}

void swap(int &a, int &b) {
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
}

int min(int x, int y) {
    if (x < y) return x;
    return y;
}

int max(int x, int y) {
    if (x > y) return x;
    return y;
}

void init(int N, int D, int H[]) {
    n = N;
    d = D;
    for (int i = 1; i <= n; i++) {
        h[i] = H[i - 1];
    }
}

void upd(int id, int x) {
    bool ok = s[id].find(x) != s[id].end();
    if (ok) s[id].erase(x);
    else s[id].insert(x);
}

void curseChanges(int U, int A[], int B[]) {
    m = U;
    for (int i = 1; i <= m; i++) {
        a[i] = A[i - 1] + 1;
        b[i] = B[i - 1] + 1;
        upd(a[i], b[i]);
        upd(b[i], a[i]);
    }
}

int question(int x, int y, int v) {
    x++;
    y++;
    vector <int> act;
    for (int it: s[y]) {
        act.push_back(h[it]);
        // cout << y << ' ' << it << '\n';
    }
    sort(act.begin(), act.end());
    int ans = 1e9;
    if (!len(act)) return ans;
    for (int i: s[x]) {
        // cout << x << ' ' << i << '\n';
        int l = 0, r = len(act) - 1;
        while (l + 1 < r) {
            int md = l + r >> 1;
            if (h[i] <= act[md]) r = md;
            else l = md;
        }
        ans = min({ans, abs(h[i] - act[l]), abs(h[i] - act[r])});
    }

    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...