Submission #1151476

#TimeUsernameProblemLanguageResultExecution timeMemory
1151476ghammazhassanCircle Passing (EGOI24_circlepassing)C++20
100 / 100
352 ms79488 KiB
// #include <bits/stdc++.h>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <map>
#include <vector>
#include <iomanip>
#include <string>
#include <queue>
#include <set>
#include <deque>
using namespace std;
#define int long long
const int N=2e5+5;
const int M=998244353;
const int LOG = 18;
int n , m , c , t=1 , q=1 , x , y , p[N];
vector<int>a;
int que(int x,int y){
	if (x>y){
		swap(x,y);
	}
	int l=0;
	int h=m*2-1;
	int mi=(l+h+1)/2;
	while (l<h){
		if (a[mi]>x){
			h=mi-1;
		}
		else{
			l=mi;
		}
		mi=(l+h+1)/2;
	}
	int u1=a[mi];
	l=0;
	h=m*2-1;
	mi=(l+h)/2;
	while (l<h){
		if (a[mi]<x){
			l=mi+1;;
		}
		else{
			h=mi;
		}
		mi=(l+h)/2;
	}
	int u2=a[mi];
	int d1=min(y-x,x+2*n-y);
	int d2=abs(u1-x)+abs(u1+n-y)+1;
	int d3=abs(u2-x)+abs(u2+n-y)+1;
	return min({d1,d2,d3});
}
void solve()
{
	cin >> n >> m >> q;
	map<int,int>d;
	for (int i=0;i<m;i++){
		cin >> x;
		d[x]=1;
		d[x+n]=1;
		a.push_back(x);
	}
	for (int i=0;i<3*m;i++){
		a.push_back(a[i]+n);
	}
	for (int o=0;o<q;o++){
		cin >> x >> y;
		cout << min(que(x,y),que(x+n,y+n)) << endl;
	}
}
signed main()
{

    ios::sync_with_stdio(0);//DO NOT USE IN INTERACTIVE
    cin.tie(0), cout.tie(0);//DO NOT USE IN INTERACTIVE
    cout << fixed<<setprecision(9);
    // int t=1;
    // cin >> t;
    
    for (int _=1;_<=t;_++){
    	solve();
    	q++;
    }
}
#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...