結果

問題 No.3072 Speedrun Query
ユーザー keisuke6
提出日時 2025-03-21 21:42:16
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 1,066 ms / 2,500 ms
コード長 880 bytes
コンパイル時間 2,284 ms
コンパイル使用メモリ 195,684 KB
実行使用メモリ 7,808 KB
最終ジャッジ日時 2025-03-21 21:42:39
合計ジャッジ時間 18,169 ms
ジャッジサーバーID
(参考情報)
judge2 / judge7
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 21
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;
#define int long long
vector<int> A,B;
int f(int a){
	auto it = lower_bound(A.begin(),A.end(),a);
	int ans = 1e18;
	if(it != A.end()) ans = min(ans,*it-a);
	if(it != A.begin()){
		it--;
		ans = min(ans,a-*it);
	}
	return ans;
}
int g(int a){
	auto it = lower_bound(B.begin(),B.end(),a);
	int ans = 1e18;
	if(it != B.end()) ans = min(ans,*it-a);
	if(it != B.begin()){
		it--;
		ans = min(ans,a-*it);
	}
	return ans;
}
signed main(){
	int aa,N,M;
	cin>>aa>>N>>M;
	A.resize(N);
	B.resize(M);
	for(int i=0;i<N;i++) cin>>A[i];
	for(int i=0;i<M;i++) cin>>B[i];
	int Q;
	int mi = 1e18;
	for(int x:B) mi = min(mi,f(x));
	cin>>Q;
	while(Q--){
		int s,t;
		cin>>s>>t;
		int x = mi;
		int ans = abs(s-t);
		ans = min(ans,f(s)+f(t));
		ans = min(ans,g(s)+g(t));
		ans = min(ans,f(s)+x+g(t));
		ans = min(ans,f(t)+x+g(s));
		cout<<ans<<endl;
	}
}
0