結果
問題 | 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)