Submission #1231281

#TimeUsernameProblemLanguageResultExecution timeMemory
1231281banganNile (IOI24_nile)C++20
Compilation error
0 ms0 KiB
#include "nile.h"
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define pb push_back
#define ALL(a) a.begin(), a.end()

std::vector<long long> calculate_costs(std::vector<int> W, std::vector<int> A, std::vector<int> B, std::vector<int> E) {
    int N = W.size();
    int Q = E.size();

    vector<int> ord(N);
    iota(ALL(ord), 0);
    sort(ALL(ord), [&](int i, int j) {
        return W[i]<W[j];
    });

    auto f = [&](int i) {
        return W[ord[i+1]]-W[ord[i]];
    };

    vector<int> edges(N-1);
    iota(ALL(edges), 0);
    sort(ALL(edges), [&](int i, int j) {
        return f(i) < f(j);
    });

    vector<int> qry(Q);
    iota(ALL(qry), 0);
    sort(ALL(qry), [&](int i, int j) {
        return E[i]<E[j];
    });

    ll res = 2*N;
    vector<int> par(N), sz(N);
    for (int i=0; i<N; i++) par[i]=i, sz[i]=1;
    auto find = [&](auto self, int v) -> int {
        return par[v]==v ? v : par[v] = self(self, par[v]);
    };
    auto merge = [&](int v, int u) {
        v = find(find, v);
        u = find(find, u);
        assert(v != u);

        if (v > u) swap(v, u);
        res -= sz[v] + sz[v]%2;
        res -= sz[u] + sz[u]%2;
        
        sz[v] += sz[u];
        par[u] = v;
        res += sz[v] + sz[v]%2;
    };

    auto cur = edges.begin();
    vector<ll> ans(Q);

    for (int id : qry) {
        while (cur != edges.end() && f(*cur) <= E[id]) {
            merge(*cur, *cur + 1);
            cur++;
        }
        ans[id] = res;
    }
    return ans;
}
#include "nile.h"
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define pb push_back
#define ALL(a) a.begin(), a.end()

std::vector<long long> calculate_costs(std::vector<int> W, std::vector<int> A, std::vector<int> B, std::vector<int> E) {
    int N = W.size();
    int Q = E.size();

    vector<int> ord(N);
    iota(ALL(ord), 0);
    sort(ALL(ord), [&](int i, int j) {
        return W[i]<W[j];
    });

    auto f = [&](int i) {
        return W[ord[i+1]]-W[ord[i]];
    };

    vector<int> edges(N-1);
    iota(ALL(edges), 0);
    sort(ALL(edges), [&](int i, int j) {
        return f(i) < f(j);
    });

    vector<int> qry(Q);
    iota(ALL(qry), 0);
    sort(ALL(qry), [&](int i, int j) {
        return E[i]<E[j];
    });

    ll res = 2*N;
    vector<int> par(N), sz(N);
    for (int i=0; i<N; i++) par[i]=i, sz[i]=1;
    auto find = [&](auto self, int v) -> int {
        return par[v]==v ? v : par[v] = self(self, par[v]);
    };
    auto merge = [&](int v, int u) {
        v = find(find, v);
        u = find(find, u);
        assert(v != u);

        if (v > u) swap(v, u);
        res -= sz[v] + sz[v]%2;
        res -= sz[u] + sz[u]%2;
        
        sz[v] += sz[u];
        par[u] = v;
        res += sz[v] + sz[v]%2;
    };

    auto cur = edges.begin();
    vector<ll> ans(Q);

    for (int id : qry) {
        while (cur != edges.end() && f(*cur) <= E[id]) {
            merge(*cur, *cur + 1);
            cur++;
        }
        ans[id] = res;
    }
    return ans;
}

Compilation message (stderr)

nile.cpp:75:24: error: redefinition of 'std::vector<long long int> calculate_costs(std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)'
   75 | std::vector<long long> calculate_costs(std::vector<int> W, std::vector<int> A, std::vector<int> B, std::vector<int> E) {
      |                        ^~~~~~~~~~~~~~~
nile.cpp:9:24: note: 'std::vector<long long int> calculate_costs(std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)' previously defined here
    9 | std::vector<long long> calculate_costs(std::vector<int> W, std::vector<int> A, std::vector<int> B, std::vector<int> E) {
      |                        ^~~~~~~~~~~~~~~