結果
| 問題 |
No.2242 Cities and Teleporters
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-03-11 01:41:26 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 716 ms / 3,000 ms |
| コード長 | 1,287 bytes |
| コンパイル時間 | 2,519 ms |
| コンパイル使用メモリ | 206,520 KB |
| 最終ジャッジ日時 | 2025-02-11 09:46:16 |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 26 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define rep(i,n) for(int i=0;i<int(n);i++)
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin>>n;
vector<vector<int>> ht(n,vector<int>(3));
rep(i,n) cin>>ht.at(i).at(0);
rep(i,n) cin>>ht.at(i).at(1);
rep(i,n) ht.at(i).at(2)=i;
sort(ht.begin(),ht.end());
vector<int> p(n);
rep(i,n) p.at(ht.at(i).at(2))=i;
vector<int> cnd(n+1,-1);
vector<int> cph(n);
rep(i,n) cph.at(i)=ht.at(i).at(0);
rep(i,n){
auto it=upper_bound(cph.begin(),cph.end(),ht.at(i).at(1));
cnd.at(i+1)=max(cnd.at(i),int(it-cph.begin()-1));
}
vector<vector<int>> ddv(30,vector<int>(n,0));
rep(i,n) ddv.at(0).at(i)=max(cnd.at(i+1),i);
rep(i,29){
rep(j,n){
ddv.at(i+1).at(j)=ddv.at(i).at(ddv.at(i).at(j));
}
}
int q;
cin>>q;
rep(Qi,q){
int a,b;
cin>>a>>b;
a--; b--;
int na=p.at(a),nb=p.at(b);
int ans=1;
na=upper_bound(cph.begin(),cph.end(),ht.at(na).at(1))-cph.begin()-1;
if(na==-1) ans=-1;
else if(na<nb){
for(int i=29;i>=0;i--){
if(ddv.at(i).at(na)<nb){
na=ddv.at(i).at(na);
ans+=1<<i;
}
}
na=ddv.at(0).at(na);
ans++;
if(na<nb) ans=-1;
}
cout<<ans<<'\n';
}
}