Submission #1325385

#TimeUsernameProblemLanguageResultExecution timeMemory
1325385shirokuma5The Potion of Great Power (CEOI20_potion)C++20
38 / 100
478 ms327680 KiB
#include<bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
using namespace std;

int n, d, u;
vector<int> h, a, b;
vector<vector<vector<int>>> lis;
vector<vector<int>> lday;

void chmin(int &a, int b) {
    if (a > b) a = b;
}

void init(int N, int D, int H[]) {
    n = N; d = D;
    h.resize(N);
    rep(i, N) h[i] = H[i];
}

void curseChanges(int U, int A[], int B[]) {
    u = U;
    a.resize(U); b.resize(U);
    rep(i, U) {
        a[i] = A[i]; b[i] = B[i];
        if (a[i] > b[i]) swap(a[i], b[i]);
    }

    lis.assign(n, {{}}); lday.resize(n, {0});
    set<pair<int, int>> se;
    rep(i, U) {
        lis[a[i]].push_back(lis[a[i]].back()); lis[b[i]].push_back(lis[b[i]].back());
        lday[a[i]].push_back(i+1); lday[b[i]].push_back(i+1);
        if (se.count({a[i], b[i]})) {
            se.erase({a[i], b[i]});
            lis[a[i]].back().erase(find(lis[a[i]].back().begin(), lis[a[i]].back().end(), h[b[i]]));
            lis[b[i]].back().erase(find(lis[b[i]].back().begin(), lis[b[i]].back().end(), h[a[i]]));
        }
        else {
            se.insert({a[i], b[i]});
            lis[a[i]].back().push_back(h[b[i]]); lis[b[i]].back().push_back(h[a[i]]);
        }
    }

    rep(i, n) for (auto &v : lis[i]) {
        sort(v.begin(), v.end());
    }
}

int question(int x, int y, int v) {
    int idx = distance(lday[x].begin(), upper_bound(lday[x].begin(), lday[x].end(), v))-1;
    int idy = distance(lday[y].begin(), upper_bound(lday[y].begin(), lday[y].end(), v))-1;
    const auto &vx = lis[x][idx], &vy = lis[y][idy];
    int res = 1e9;
    int i = 0, j = 0;
    while (i < vx.size() && j < vy.size()) {
        chmin(res, abs(vx[i] - vy[j]));
        if (vx[i] <= vy[j]) i++;
        else j++;
    }
    return res;
}
#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...