Submission #702272

#TimeUsernameProblemLanguageResultExecution timeMemory
702272CyanmondThe Potion of Great Power (CEOI20_potion)C++17
0 / 100
672 ms262144 KiB
#include <bits/stdc++.h> using i64 = long long; int n, d, u; std::vector<int> h; std::vector<int> a, b; constexpr int BS = 500; int blocks; std::vector<std::vector<std::unordered_set<int>>> trustListBlock; constexpr int inf = 1000000000; void init(int N, int D, int H[]) { n = N; d = D; for (int i = 0; i < n; ++i) { h.push_back(H[i]); } } void curseChanges(int U, int A[], int B[]) { u = U; for (int i = 0; i < u; ++i) { a.push_back(A[i]); b.push_back(B[i]); } blocks = (u + BS - 1) / BS; std::vector<std::unordered_set<int>> trustList(n); for (int i = 0; i < u; ++i) { if (i % BS == 0) { trustListBlock.push_back(trustList); } if (trustList[a[i]].find(b[i]) == trustList[a[i]].end()) { // insert trustList[a[i]].insert(b[i]); trustList[b[i]].insert(a[i]); } else { // erase trustList[a[i]].erase(b[i]); trustList[b[i]].erase(a[i]); } } assert(trustListBlock.size() == blocks); } int question(int x, int y, int v) { // check const int l = v / BS * BS, r = v; auto &trustList = trustListBlock[v / BS]; for (int i = l; i < r; ++i) { if (trustList[a[i]].find(b[i]) == trustList[a[i]].end()) { // insert trustList[a[i]].insert(b[i]); trustList[b[i]].insert(a[i]); } else { // erase trustList[a[i]].erase(b[i]); trustList[b[i]].erase(a[i]); } } std::vector<std::pair<int, bool>> vals; for (const int e : trustList[x]) { vals.push_back({e, true}); } for (const int e : trustList[y]) { vals.push_back({e, false}); } std::sort(vals.begin(), vals.end(), [&](const auto &a, const auto &b) { return h[a.first] < h[b.first]; }); int answer = inf; for (int i = 1; i < (int)vals.size(); ++i) { if (vals[i - 1].second != vals[i].second) { answer = std::min(answer, h[vals[i].first] - h[vals[i - 1].first]); } } for (int i = r - 1; i >= l; --i) { if (trustList[a[i]].find(b[i]) == trustList[a[i]].end()) { // insert trustList[a[i]].insert(b[i]); trustList[b[i]].insert(a[i]); } else { // erase trustList[a[i]].erase(b[i]); trustList[b[i]].erase(a[i]); } } return answer; }

Compilation message (stderr)

In file included from /usr/include/c++/10/cassert:44,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:33,
                 from potion.cpp:1:
potion.cpp: In function 'void curseChanges(int, int*, int*)':
potion.cpp:44:34: warning: comparison of integer expressions of different signedness: 'std::vector<std::vector<std::unordered_set<int> > >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   44 |     assert(trustListBlock.size() == blocks);
      |            ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~
#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...