結果
問題 | No.3072 Speedrun Query |
ユーザー |
![]() |
提出日時 | 2025-03-21 23:12:00 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 1,092 ms / 2,500 ms |
コード長 | 3,039 bytes |
コンパイル時間 | 2,283 ms |
コンパイル使用メモリ | 196,760 KB |
実行使用メモリ | 12,416 KB |
最終ジャッジ日時 | 2025-03-21 23:12:18 |
合計ジャッジ時間 | 17,826 ms |
ジャッジサーバーID (参考情報) |
judge7 / judge6 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 21 |
ソースコード
#include <bits/stdc++.h>using namespace std;#define CPP_STR(x) CPP_STR_I(x)#define CPP_CAT(x, y) CPP_CAT_I(x, y)#define CPP_STR_I(args...) #args#define CPP_CAT_I(x, y) x##y#define ASSERT(expr...) assert((expr))using i8 = int8_t;using u8 = uint8_t;using i16 = int16_t;using u16 = uint16_t;using i32 = int32_t;using u32 = uint32_t;using i64 = int64_t;using u64 = uint64_t;using f32 = float;using f64 = double;// }}}constexpr i64 INF = 1'010'000'000'000'000'017LL;constexpr i64 MOD = 998244353LL;constexpr f64 EPS = 1e-12;constexpr f64 PI = 3.14159265358979323846;#define M5 100007#define M9 1000000000#define F first#define S second// util {{{#define FOR(i, start, end) for (i64 i = (start), CPP_CAT(i, xxxx_end) = (end); i < CPP_CAT(i, xxxx_end); ++i)#define REP(i, n) FOR(i, 0, n)#define all(x) (x).begin(), (x).end()#define ll long long int#define VI vector<ll>#define VVI vector<VI>#define ISD true#define debug(x) \if (ISD) \cout << #x << ": " << x << endltemplate <typename T, typename U, typename Comp = less<>>bool chmax(T &xmax, const U &x, Comp comp = {}){if (comp(xmax, x)){xmax = x;return true;}return false;}template <typename T, typename U, typename Comp = less<>>bool chmin(T &xmin, const U &x, Comp comp = {}){if (comp(x, xmin)){xmin = x;return true;}return false;}ll findClosestElement(const std::vector<ll> &A, ll X){auto it = std::lower_bound(A.begin(), A.end(), X);if (it == A.begin())return *it; // すべての要素が X より大きい場合if (it == A.end())return *(it - 1); // すべての要素が X より小さい場合// 2つの候補のうち、X に近い方を返すll val1 = *it;ll val2 = *(it - 1);return (std::abs(val1 - X) < std::abs(val2 - X)) ? val1 : val2;}int main(){ll N, KA, KB;cin >> N >> KA >> KB;vector<ll> A(KA);REP(i, KA){cin >> A[i];A[i]--;}vector<ll> B(KB);REP(i, KB){cin >> B[i];B[i]--;}ll Q;cin >> Q;vector<ll> S(Q), T(Q);REP(i, Q){cin >> S[i] >> T[i];S[i]--;T[i]--;}ll KAB = INF;REP(i, KA){ll b = findClosestElement(B, A[i]);chmin(KAB, abs(b - A[i]));}// cout << KAB << endl;REP(i, Q){ll SA = abs(S[i] - findClosestElement(A, S[i]));ll SB = abs(S[i] - findClosestElement(B, S[i]));ll TA = abs(T[i] - findClosestElement(A, T[i]));ll TB = abs(T[i] - findClosestElement(B, T[i]));ll ans = INF;chmin(ans, T[i] - S[i]);// cout << ans << endl;chmin(ans, SA + TA);// cout << ans << endl;chmin(ans, SB + TB);chmin(ans, SA + KAB + TB);// cout << ans << endl;chmin(ans, SB + KAB + TA);cout << ans << endl;// break;}}