結果
| 問題 |
No.2885 Range Triangle Collision Decision Queries
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-02-01 13:37:47 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,737 bytes |
| コンパイル時間 | 711 ms |
| コンパイル使用メモリ | 82,048 KB |
| 実行使用メモリ | 52,352 KB |
| 最終ジャッジ日時 | 2025-02-01 13:38:04 |
| 合計ジャッジ時間 | 14,988 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 2 |
| other | WA * 53 |
ソースコード
import sys
class SegmentTree:
def __init__(self, n):
self.n = n
self.data = [[] for _ in range(4 * n)]
def build(self, index, l, r, triangles):
if l == r:
self.data[index] = [triangles[l]]
return
mid = (l + r) // 2
self.build(2 * index + 1, l, mid, triangles)
self.build(2 * index + 2, mid + 1, r, triangles)
self.data[index] = sorted(self.data[2 * index + 1] + self.data[2 * index + 2])
def query(self, index, l, r, ql, qr, x_range):
if r < ql or qr < l:
return False
if ql <= l and r <= qr:
left, right = x_range
return any(left < x2 and x1 < right for x1, x2 in self.data[index])
mid = (l + r) // 2
return self.query(2 * index + 1, l, mid, ql, qr, x_range) or self.query(2 * index + 2, mid + 1, r, ql, qr, x_range)
def solve():
input = sys.stdin.read
data = input().split()
index = 0
N = int(data[index])
index += 1
triangles = []
for i in range(N):
A, B, D = map(int, data[index:index+3])
index += 3
triangles.append((A - D, A + D, B - D, B))
triangles.sort() # x座標の左端でソート
segment_tree = SegmentTree(N)
segment_tree.build(0, 0, N - 1, [(x1, x2) for x1, x2, _, _ in triangles])
Q = int(data[index])
index += 1
results = []
for _ in range(Q):
S, L, R = map(int, data[index:index+3])
index += 3
S -= 1; L -= 1; R -= 1
sx1, sx2, sy1, sy2 = triangles[S]
found = segment_tree.query(0, 0, N - 1, L, R, (sx1, sx2))
results.append("Yes" if found else "No")
sys.stdout.write("\n".join(results) + "\n")