제출 #1151474

#제출 시각아이디문제언어결과실행 시간메모리
1151474Jawad_Akbar_JJCircle Passing (EGOI24_circlepassing)C++20
100 / 100
389 ms47536 KiB
#include <iostream>
#include <set>

using namespace std;
int n, m, q;

int dist(int x, int y){
	return min(abs(x - y), n + n - abs(x - y));
}

int main(){
	cin>>n>>m>>q;

	set<int> st;
	for (int i=1, x;i<=m;i++)
		cin>>x, st.insert(x), st.insert(x + n);

	for (int i=1, x, y, tn = n + n;i<=q;i++){
		cin>>x>>y;

		int Mn = dist(x, y);
		
		auto u = st.upper_bound(x);
		if (u == st.end())
			u = st.begin();
		Mn = min(Mn, dist(x, *u) + 1 + dist(y, (*u + n) % (n + n)));

		u = st.upper_bound(x);
		if (u == st.begin())
			u = st.end();
		u = prev(u);
		Mn = min(Mn, dist(x, *u) + 1 + dist(y, (*u + n) % (n + n)));

		cout<<Mn<<'\n';
	}
}
#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...