結果
問題 |
No.1982 [Cherry 4th Tune B] 絶険
|
ユーザー |
![]() |
提出日時 | 2025-04-15 22:18:16 |
言語 | PyPy3 (7.3.15) |
結果 |
MLE
|
実行時間 | - |
コード長 | 2,377 bytes |
コンパイル時間 | 231 ms |
コンパイル使用メモリ | 82,096 KB |
実行使用メモリ | 573,364 KB |
最終ジャッジ日時 | 2025-04-15 22:20:01 |
合計ジャッジ時間 | 10,598 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 5 MLE * 2 -- * 28 |
ソースコード
import sys sys.setrecursionlimit(1 << 25) class Node: __slots__ = ['left', 'right', 'delta'] def __init__(self, left=None, right=None, delta=0): self.left = left self.right = right self.delta = delta def build(a, b): if a == b: return Node() mid = (a + b) // 2 left = build(a, mid) right = build(mid+1, b) return Node(left, right) def update(node, a, b, l, r, delta): if b < l or a > r: return node new_node = Node(node.left, node.right, node.delta) if l <= a and b <= r: new_node.delta += delta return new_node mid = (a + b) // 2 new_node.left = update(new_node.left, a, mid, l, r, delta) new_node.right = update(new_node.right, mid+1, b, l, r, delta) return new_node def query(node, a, b, x): if a == b: return node.delta mid = (a + b) // 2 res = node.delta if x <= mid: res += query(node.left, a, mid, x) else: res += query(node.right, mid+1, b, x) return res def main(): import sys input = sys.stdin.read().split() ptr = 0 N = int(input[ptr]) ptr +=1 K = int(input[ptr]) ptr +=1 Q = int(input[ptr]) ptr +=1 operations = [] for _ in range(K): L = int(input[ptr]) ptr +=1 R = int(input[ptr]) ptr +=1 C = int(input[ptr]) ptr +=1 H = int(input[ptr]) ptr +=1 operations.append( (L, R, C, H) ) if N ==0: versions = [] else: versions = [build(1, N)] for L, R, C, H in operations: new_root = update(versions[-1], 1, N, L, R, H) versions.append(new_root) for _ in range(Q): I = int(input[ptr]) ptr +=1 X = int(input[ptr]) ptr +=1 T = X - 0.5 if K ==0: print(-1) continue sum_total = query(versions[K], 1, N, I) if sum_total < T: print(-1) continue low = 1 high = K ans = K while low <= high: mid = (low + high) // 2 current_sum = query(versions[mid], 1, N, I) if current_sum >= T: ans = mid high = mid -1 else: low = mid +1 print(operations[ans-1][2]) if __name__ == "__main__": main()