結果
| 問題 |
No.2242 Cities and Teleporters
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-03-10 22:51:29 |
| 言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.87.0) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,510 bytes |
| コンパイル時間 | 7,743 ms |
| コンパイル使用メモリ | 269,356 KB |
| 最終ジャッジ日時 | 2025-02-11 08:57:34 |
|
ジャッジサーバーID (参考情報) |
judge5 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 10 WA * 14 RE * 2 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i=0; i<n; i++)
typedef long long ll;
int main() {
cin.tie(0); ios::sync_with_stdio(false);
int N; cin >> N;
vector<int> H, T;
rep(i, N) {
int Hi; cin >> Hi;
H.push_back(Hi);
}
rep(i, N) {
int Ti; cin >> Ti;
T.push_back(Ti);
}
vector<vector<int>> HTI;
rep(i, N) HTI.push_back({H[i], T[i], i});
sort(HTI.begin(), HTI.end());
int idx[N];
rep(i, N) {
H[i] = HTI[i][0];
T[i] = HTI[i][1];
idx[HTI[i][2]] = i;
}
int to[N+1];
to[0] = 0;
rep(v, N) to[v+1] = upper_bound(H.begin(), H.end(), T[v])-H.begin();
int dp[30][N+1];
dp[0][0] = 0;
for (int v=1; v<=N; v++) dp[0][v] = max(dp[0][v-1], to[v]);
for (int i=1; i<30; i++) rep(v, N) dp[i][v] = dp[i-1][dp[i-1][v]];
int Q; cin >> Q;
while (Q--) {
int A, B; cin >> A >> B;
A = idx[A-1]+1;
B = idx[B-1]+1;
int v = to[A];
int ans;
if (B<=v) ans = 1;
else {
int ok = N+10;
int ng = -1;
while (abs(ok-ng)>1) {
int mid = (ok+ng)/2;
int now = v;
rep(i, 20) if ((mid>>i)&1) now = dp[i][now];
if (B<=now) ok = mid;
else ng = mid;
}
if (ok>N) ans = -1;
else ans = ok+1;
}
printf("%d\n", ans);
}
}