結果
問題 |
No.3072 Speedrun Query
|
ユーザー |
![]() |
提出日時 | 2025-03-22 00:43:51 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 479 ms / 2,500 ms |
コード長 | 1,430 bytes |
コンパイル時間 | 2,354 ms |
コンパイル使用メモリ | 197,216 KB |
実行使用メモリ | 5,888 KB |
最終ジャッジ日時 | 2025-03-22 00:44:03 |
合計ジャッジ時間 | 10,529 ms |
ジャッジサーバーID (参考情報) |
judge7 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 21 |
ソースコード
#include <bits/stdc++.h> using namespace std; using Int = long long; template <class T> inline bool setmin(T &A, T B){ if (A > B){ A = B; return true; } else { return false; } } template <class T> inline bool setmax(T &A, T B){ if (A < B){ A = B; return true; } else { return false; } } #define REP(x, y) for (int x = 0; x < int(y); ++x) #define rep(x, y, z) for (int x = int(y); x < int(z); ++x) #define PER(x, y) for (int x = int(y) - 1; x >= 0; --x) #define per(x, y, z) for (int x = int(z) - 1; x >= int(y); --x) void solve(){ int N, KA, KB; cin >> N >> KA >> KB; vector<int> a(KA); REP(i, KA){ cin >> a[i]; } vector<int> b(KB); REP(i, KB){ cin >> b[i]; } auto min_dist = [&](vector<int> &arr, int x) -> int{ auto itr = lower_bound(arr.begin(), arr.end(), x); int mn = N; if (itr != arr.end()){ setmin(mn, *itr - x); } if (itr != arr.begin()){ setmin(mn, x - *--itr); } return mn; }; int ab = N; REP(i, KA){ setmin(ab, min_dist(b, a[i])); } int Q; cin >> Q; REP(i, Q){ int s, t; cin >> s >> t; int ans = t - s; setmin(ans, min_dist(a, s) + min_dist(a, t)); setmin(ans, min_dist(b, s) + min_dist(b, t)); setmin(ans, min_dist(a, s) + ab + min_dist(b, t)); setmin(ans, min_dist(b, s) + ab + min_dist(a, t)); cout << ans << '\n'; } } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int t = 1; // cin >> t; while (t--){ solve(); } }