Submission #1289379

#TimeUsernameProblemLanguageResultExecution timeMemory
1289379loomThe Potion of Great Power (CEOI20_potion)C++20
0 / 100
212 ms58600 KiB
#include<bits/stdc++.h> using namespace std; #define inf (int)1e9 #define nl '\n' const int N = 1e5+1, c = 35; vector<pair<int, vector<int>>> g[N]; int h[N]; int n; bool cmp(int x, int y){ return h[x] < h[y]; } void init(int N, int D, int H[]){ n = N; for(int i = 0; i < n; i++) h[i] = H[i]; } void curseChanges(int u, int a[], int b[]){ set<int> cg[n]; for(int i = 1; i <= u; i++){ auto add = [&](int x, int y){ auto &cgx = cg[x]; if(cgx.count(y)) cgx.erase(y); else cgx.insert(y); if(g[x].size() % c != 0){ g[x].push_back({i, {y}}); return; } vector<int> v(cgx.begin(), cgx.end()); sort(v.begin(), v.end(), cmp); g[x].push_back({i, v}); }; add(a[i-1], b[i-1]); add(b[i-1], a[i-1]); } } vector<int> get(int x, int d){ auto &gx = g[x]; int n = gx.size(); vector<int> v = {inf}; int r = upper_bound(gx.begin(), gx.end(), pair(d, v)) - gx.begin() - 1; if(r < 0) return {}; int l = r - (r % c); auto cmp = [&](int x, int y){ return h[x] < h[y]; }; auto &cg = gx[l].second; set<int> st; for(int i = l+1; i <= r; i++){ int y = gx[i].second[0]; if(st.count(y)) st.erase(y); else st.insert(y); } vector<int> ng(st.begin(), st.end()); sort(ng.begin(), ng.end(), cmp); v.resize(cg.size() + ng.size()); merge(cg.begin(), cg.end(), ng.begin(), ng.end(), v.begin()); vector<int> res; for(int i = 0; i+1 < (int)v.size(); i++){ if(v[i] == v[i+1]) i++; else res.push_back(h[v[i]]); } return res; } int question(int p, int q, int v){ auto v1 = get(p, v); auto v2 = get(q, v); int s1 = v1.size(), s2 = v2.size(); int ans = inf; for(int i = 0, j = -1; i < s1; i++){ while(j+1 < s2 and v2[j+1] <= v1[i]) j++; ans = min(ans, min(j >= 0 ? v1[i] - v2[j] : inf, j+1 < s2 ? v2[j+1] - v1[i] : inf)); } return ans; }
#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...