結果
| 問題 |
No.2687 所により大雨
|
| コンテスト | |
| ユーザー |
👑 SPD_9X2
|
| 提出日時 | 2024-03-01 11:16:09 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 371 ms / 2,000 ms |
| コード長 | 1,480 bytes |
| コンパイル時間 | 336 ms |
| コンパイル使用メモリ | 82,316 KB |
| 実行使用メモリ | 81,508 KB |
| 最終ジャッジ日時 | 2024-09-30 05:59:43 |
| 合計ジャッジ時間 | 7,587 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 25 |
ソースコード
# 想定解
# O(KMlogN)
import sys
from sys import stdin
N,M = map(int,stdin.readline().split())
assert 1 <= N <= 10**5
assert 1 <= M <= 10**3
lrA = []
lrB = []
for i in range(N):
L,R = map(int,stdin.readline().split())
lrA.append( (L,R) )
assert -10**9 <= L <= R <= 10**9
for i in range(M):
L,R = map(int,stdin.readline().split())
lrB.append( (L,R) )
assert -10**9 <= L <= R <= 10**9
K = int(stdin.readline())
assert 1 <= K <= 10**3
P = list(map(int,stdin.readline().split()))
assert len(P) == K
for p in P:
assert -10**9 <= p <= 10**9
for i in range(K-1):
assert P[i] < P[i+1]
lrA.sort()
lrB.sort()
flag = False
for i in range(N-1):
l,r = lrA[i]
L,R = lrA[i+1]
if L <= r:
flag = True
for i in range(M-1):
l,r = lrB[i]
L,R = lrB[i+1]
if L <= r:
flag = True
if flag:
print (*[1]*K)
sys.exit()
ans = []
for p in P:
flag = False
for L,R in lrB:
# L-t = p -> t = L-p
tl = L-p
tr = R-p
# l+tl = p -> l = p-tl
sl = p - tr
sr = p - tl
ok = 0
ng = len(lrA)
while abs(ok-ng) != 1:
mid = (ok+ng)//2
if lrA[mid][0] <= sr:
ok = mid
else:
ng = mid
l,r = lrA[ok]
if not( r < sl or sr < l ):
flag = True
break
if flag:
ans.append(1)
else:
ans.append(0)
print (*ans)
SPD_9X2