結果
問題 |
No.3072 Speedrun Query
|
ユーザー |
![]() |
提出日時 | 2025-03-22 05:10:11 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 137 ms / 2,500 ms |
コード長 | 1,260 bytes |
コンパイル時間 | 3,685 ms |
コンパイル使用メモリ | 277,236 KB |
実行使用メモリ | 12,672 KB |
最終ジャッジ日時 | 2025-03-22 05:10:21 |
合計ジャッジ時間 | 8,136 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 21 |
ソースコード
#include<bits/stdc++.h> using namespace std; #define rep(i,n) for(int i=0;i<(int)(n);i++) #define ALL(v) v.begin(),v.end() typedef long long ll; template <class T> using V=vector<T>; template <class T> using VV=V<V<T>>; const int INF=1e9; int main(){ ios::sync_with_stdio(false); std::cin.tie(nullptr); int n,ka,kb; cin>>n>>ka>>kb; V<int> A(n+1),B(n+1); rep(i,ka){ int a; cin>>a; A[a]=1; } rep(i,kb){ int b; cin>>b; B[b]=1; } V<int> LA(n+2),LB(n+2),RA(n+2),RB(n+2); LA[0]=INF,LB[0]=INF; for(int i=1;i<=n;i++){ if(A[i]==0) LA[i]=LA[i-1]+1; if(B[i]==0) LB[i]=LB[i-1]+1; } RA[n+1]=INF,RB[n+1]=INF; for(int i=n;i>=1;i--){ if(A[i]==0) RA[i]=RA[i+1]+1; if(B[i]==0) RB[i]=RB[i+1]+1; } V<int> C(n+1),D(n+1); for(int i=1;i<=n;i++){ C[i]=min(LA[i],RA[i]); D[i]=min(LB[i],RB[i]); } int la=-INF,lb=-INF,mi=INF; for(int i=1;i<=n;i++){ if(A[i]) la=i; if(B[i]) lb=i; if(A[i]) mi=min(mi,i-lb); if(B[i]) mi=min(mi,i-la); } int q; cin>>q; while(q--){ int s,t; cin>>s>>t; int ans=t-s; ans=min(ans,C[s]+C[t]); ans=min(ans,D[s]+D[t]); ans=min(ans,C[s]+D[t]+mi); ans=min(ans,D[s]+C[t]+mi); cout<<ans<<'\n'; } return 0; }