Submission #1147239

#TimeUsernameProblemLanguageResultExecution timeMemory
1147239Dan4LifeThe Potion of Great Power (CEOI20_potion)C++20
17 / 100
3068 ms327680 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 = 2000; const int totB = (int)2e5/B+1; int n, m; int a[mxN]; vector<ar2> v; unordered_map<int,vector<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){ bool found = 0; vector<ar2> V; V.clear(); for(auto [u,v] : S[t][x]){ if(v==y) found=1; else V.pb({u,v}); } if(!found) S[t][x].pb({a[y],y}); else S[t][x].swap(V); } void tog(int i, int t){ toggle(v[i][0],v[i][1],t); toggle(v[i][1],v[i][0],t); } 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; j < totB; j++) tog(i,j); } } int question(int x, int y, int t) { int ans = (int)1e9; if(!t) return ans; t--; int T = t; t/=B; for(int i = T+1; i < min(m,(t+1)*B); i++) tog(i,t); if(S[t].find(x)!=end(S[t]) and S[t].find(y)!=end(S[t])){ if(sz(S[t][x]) and sz(S[t][y])){ auto A = S[t][x]; auto B = S[t][y]; int j = 0; sort(all(A)); sort(all(B)); for(auto [u,v] : A){ while(j<sz(B) and B[j][0]<u) j++; if(j!=sz(B)) ans=min(ans,abs(u-B[j][0])); if(j) ans=min(ans,abs(u-B[j-1][0])); } } } for(int i = T+1; i < min(m,(t+1)*B); i++) tog(i,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...