Submission #1147225

#TimeUsernameProblemLanguageResultExecution timeMemory
1147225Dan4LifeThe Potion of Great Power (CEOI20_potion)C++20
0 / 100
726 ms303464 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define sz(a) (int)a.size() #define all(a) begin(a),end(a) using ar2 = array<int,2>; const int mxN = (int)1e5+10; const int B = 1000; const int totB = (int)5e4/B+2; int n, m; int a[mxN]; vector<ar2> v; unordered_map<int,set<ar2>> S[totB]; void init(int N, int D, int H[]) { n = N; for(int i = 0; i < n; i++) a[i]=H[i]; } void toggle(int x, int y, int t){ if(S[t][x].count({a[y],y})) S[t][x].erase({a[y],y}); else S[t][x].insert({a[y],y}); } void curseChanges(int U, int A[], int _B[]) { m = U; for(int i = 0; i < m; i++){ int x = A[i], y = _B[i]; v.pb({x,y}); for(int j = i/B+1; j < totB; j++) toggle(x,y,j), toggle(y,x,j); } } int question(int x, int y, int t) { int ans = (int)1e9; if(!t) return ans; int origT = t; t/=B; for(int i = t*B; i <= origT; i++) toggle(v[i][0],v[i][1],t),toggle(v[i][1],v[i][0],t); if(!sz(S[t][x]) or !sz(S[t][y])){ for(int i = t*B; i <= origT; i++) toggle(v[i][0],v[i][1],t),toggle(v[i][1],v[i][0],t); return ans; } auto itr = begin(S[t][y]); for(auto [u,v] : S[t][x]){ while(itr!=end(S[t][y]) and (*itr)[0] < u) itr++; if(itr!=begin(S[t][y])) ans=min(ans, abs(u-(*prev(itr))[0])); if(itr!=end(S[t][y])) ans=min(ans, abs(u-(*itr)[0])); } for(int i = t*B; i <= origT; i++) toggle(v[i][0],v[i][1],t),toggle(v[i][1],v[i][0],t); 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...