제출 #590188

#제출 시각아이디문제언어결과실행 시간메모리
590188piOOEThe Potion of Great Power (CEOI20_potion)C++17
100 / 100
1818 ms33500 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const int maxN = 100000, maxU = 200000, INF = 1000000000, BL = 300; int a[maxU], b[maxU], h[maxN], n, u, d; bool cmp(int i, int j) { return (h[i] != h[j] ? h[i] < h[j] : i < j); } vector<int> mrg(vector<int>& A, vector<int>& B) { vector<int> C(A.size() + B.size()), ans; merge(A.begin(), A.end(), B.begin(), B.end(), C.begin(), cmp); for (int i = 0; i < C.size();) { int j = i; while (j < C.size() && C[j] == C[i]) { j += 1; } if ((j - i) & 1) { ans.push_back(C[i]); } i = j; } return ans; } vector<vector<int>> g[maxN]; vector<int> temp[maxN]; vector<int> ti[maxN]; vector<pair<int, int>> c[maxN]; void init(int N, int D, int H[]) { n = N, d = D; memcpy(h, H, sizeof(h[0]) * n); } void curseChanges(int U, int A[], int B[]) { u = U; vector<int> empt; memcpy(a, A, sizeof(a[0]) * u), memcpy(b, B, sizeof(b[0]) * u); set<pair<int, int>> adj; for (int i = 0; i < u; ++i) { if (a[i] > b[i]) { swap(a[i], b[i]); } temp[a[i]].push_back(b[i]); temp[b[i]].push_back(a[i]); c[a[i]].emplace_back(b[i], i + 1); c[b[i]].emplace_back(a[i], i + 1); if (adj.count({a[i], b[i]})) { adj.erase({a[i], b[i]}); } else { adj.insert({a[i], b[i]}); } if (c[a[i]].size() % BL == 0) { sort(temp[a[i]].begin(), temp[a[i]].end(), cmp); g[a[i]].push_back(mrg(g[a[i]].empty() ? empt : g[a[i]].back(), temp[a[i]])); ti[a[i]].push_back(i + 1); temp[a[i]].clear(); } if (c[b[i]].size() % BL == 0) { sort(temp[b[i]].begin(), temp[b[i]].end(), cmp); g[b[i]].push_back(mrg(g[b[i]].empty() ? empt : g[b[i]].back(), temp[b[i]])); ti[b[i]].push_back(i + 1); temp[b[i]].clear(); } } } vector<int> get(int x, int v) { int it = upper_bound(ti[x].begin(), ti[x].end(), v) - ti[x].begin() - 1, t = 0; vector<int> ans; if (it > -1) { ans = g[x][it]; t = ti[x][it] + 1; } it = lower_bound(c[x].begin(), c[x].end(), make_pair(-1, t), [](pair<int, int> a, pair<int, int> b) { return a.second < b.second; }) - c[x].begin(); vector<int> nw; for (; it < int(c[x].size()) && c[x][it].second <= v; ++it) { auto [y, tt] = c[x][it]; nw.push_back(y); } sort(nw.begin(), nw.end(), cmp); return mrg(ans, nw); } int question(int x, int y, int v) { int ans = INF; vector<int> f = get(x, v), s = get(y, v); int pnt = 0; for (int to: f) { while (pnt < s.size() && h[s[pnt]] < h[to]) { pnt += 1; } if (pnt < s.size()) { ans = min(ans, h[s[pnt]] - h[to]); } if (pnt > 0) { ans = min(ans, h[to] - h[s[pnt - 1]]); } } return ans; }

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

potion.cpp: In function 'std::vector<int> mrg(std::vector<int>&, std::vector<int>&)':
potion.cpp:19:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   19 |     for (int i = 0; i < C.size();) {
      |                     ~~^~~~~~~~~~
potion.cpp:21:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   21 |         while (j < C.size() && C[j] == C[i]) {
      |                ~~^~~~~~~~~~
potion.cpp: In function 'int question(int, int, int)':
potion.cpp:103:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  103 |         while (pnt < s.size() && h[s[pnt]] < h[to]) {
      |                ~~~~^~~~~~~~~~
potion.cpp:106:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  106 |         if (pnt < s.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...