Submission #1345095

#TimeUsernameProblemLanguageResultExecution timeMemory
1345095muhammad-ahmadCircle Passing (EGOI24_circlepassing)C++20
100 / 100
427 ms70948 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

int n, m, q; 

int dist(int x, int y){
	int ans;
	if (x < y) ans = min(y - x, x + 2 * n - y);
	else ans = min(x - y, y + 2 * n - x);
	return ans;
}

signed main(){
	cin >> n >> m >> q;
	map<int, bool> f;
	vector<int> T;
	for (int i = 1; i <= m; i++){
		int k; cin >> k;
		f[k] = f[k + n] = 1;
		T.push_back(k);
		T.push_back(k + n);
	}	
	sort(begin(T), end(T));
	int lst = -1;
	
	for (int Q = 1; Q <= q; Q++){
		int x, y; cin >> x >> y;
		int ans = dist(x, y);
		auto it = lower_bound(T.begin(), T.end(), x);
		int rx, lx;
		if (it == T.end()){
			rx = T[0];
		} 
		else rx = *it;
		if (it == T.begin()) lx = T.back();
		else {
			it--;
			lx = *it;
		}
		ans = min(ans, dist(lx, x) + dist((lx + n) % (2 * n), y) + 1);
		ans = min(ans, dist(rx, x) + dist((rx + n) % (2 * n), y) + 1);
		cout << ans << endl;
	}
}
#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...