제출 #972191

#제출 시각아이디문제언어결과실행 시간메모리
972191RaresFelixThe Potion of Great Power (CEOI20_potion)C++17
38 / 100
1533 ms262144 KiB
#include <bits/stdc++.h> using namespace std; using ii = pair<int, int>; using vi = vector<int>; int n, rad; int *H0, *A0, *B0; vi Perm; vector<vector<vi> > Snapshot; vector<set<int> > S; void init(int N, int D, int H[]) { n = N; H0 = H; S.resize(n); for(int i = 0; i < n; ++i) Perm.push_back(i); sort(Perm.begin(), Perm.end(), [&](auto a, auto b) { return H[a] < H[b]; }); } void curseChanges(int U, int A[], int B[]) { rad = max(int(sqrt(U)) / 2, 1); A0 = A; B0 = B; for(int nr = 0; nr < U; ++nr) { if(nr % rad == 0) { vector<vi> Nou; for(int i = 0; i < n; ++i) { vi V; for(auto it : S[i]) V.push_back(it); Nou.push_back(V); } Snapshot.push_back(Nou); } int a = A[nr], b = B[nr]; if(S[a].count(b)) { S[a].erase(b); S[b].erase(a); } else { S[b].insert(a); S[a].insert(b); } } } const int INF = 1e9; int question(int x, int y, int v) { if(!v) { return INF; } --v; vi VSX = Snapshot[v / rad][x]; vi VSY = Snapshot[v / rad][y]; set<int> SX, SY; for(auto it : VSX) SX.insert(it); for(auto it : VSY) SY.insert(it); for(int i = v / rad * rad; i <= v; ++i) { int a = A0[i], b = B0[i]; if(b == x) swap(a, b); if(a == x) { if(SX.count(b)) SX.erase(b); else SX.insert(b); } if(b == y) swap(a, b); if(a == y) { if(SY.count(b)) SY.erase(b); else SY.insert(b); } } vi VA, VB; for(auto it : SX) VA.push_back(H0[it]); for(auto it : SY) VB.push_back(H0[it]); sort(VA.begin(), VA.end()); sort(VB.begin(), VB.end()); int p1 = 0, p2 = 0; int re = INF; while(p1 < VA.size() && p2 < VB.size()) { re = min(re, abs(VB[p2] - VA[p1])); if(VA[p1] < VB[p2]) ++p1; else ++p2; } return re; }

컴파일 시 표준 에러 (stderr) 메시지

potion.cpp: In function 'int question(int, int, int)':
potion.cpp:88:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   88 |     while(p1 < VA.size() && p2 < VB.size()) {
      |           ~~~^~~~~~~~~~~
potion.cpp:88:32: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   88 |     while(p1 < VA.size() && p2 < VB.size()) {
      |                             ~~~^~~~~~~~~~~
#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...