#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 = 1300;
const int totB = (int)2e5/B+1;
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 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 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!=end(S[t][y])) ans=min(ans, abs(u-(*itr)[0]));
				if(itr!=begin(S[t][y])) ans=min(ans, abs(u-(*prev(itr))[0]));
			}
		}
	}
	for(int i = T+1; i < min(m,(t+1)*B); i++) tog(i,t);
    return ans;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |