結果
| 問題 |
No.2242 Cities and Teleporters
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-03-22 11:41:03 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 2,533 ms / 3,000 ms |
| コード長 | 1,306 bytes |
| コンパイル時間 | 313 ms |
| コンパイル使用メモリ | 82,084 KB |
| 実行使用メモリ | 213,852 KB |
| 最終ジャッジ日時 | 2025-03-22 11:41:53 |
| 合計ジャッジ時間 | 47,216 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 26 |
ソースコード
from bisect import bisect_right
N = int(input())
H = list(map(int,input().split()))
H = [(H[i],i+1) for i in range(N)]
T = list(map(int,input().split()))
T = [(T[i],i+1) for i in range(N)]
H = sorted(H,key=lambda x:x[0])
D = {}
for i in range(N):
D[H[i][1]] = [i+1]
for i in range(N):
t,j = T[i]
D[j].append(t)
H1 = [0]+[H[i][0] for i in range(N)]
for j in D:
t = D[j].pop()
ind = bisect_right(H1,t)
D[j].append(ind-1)
D1 = sorted(list(D.values()),key=lambda x:x[0])
D1 = [0]+[[D1[i][1]] for i in range(N)]
D1[1].append(D1[1][0])
for i in range(2,N+1):
D1[i].append(max(D1[i][0],D1[i-1][1]))
K = 0
while 2**K<N:
K += 1
dp = [[0 for _ in range(K+1)] for _ in range(N+1)]
for i in range(1,N+1):
dp[i][0] = D1[i][1]
for k in range(1,K+1):
for i in range(1,N+1):
dp[i][k] = dp[dp[i][k-1]][k-1]
Q = int(input())
for _ in range(Q):
a,b = map(int,input().split())
a1 = D[a][0]
b1 = D[b][0]
flag = False
u = a1
cnt = 0
if D1[u][0]>=b1:
cnt = 1
flag = True
else:
u = D1[u][0]
cnt = 1
for k in range(K,-1,-1):
if dp[u][k]<b1:
u = dp[u][k]
cnt += 2**k
if flag:
print(1)
elif dp[u][0]>=b1:
print(cnt+1)
else:
print(-1)