結果
| 問題 |
No.1982 [Cherry 4th Tune B] 絶険
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-04-16 15:52:00 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
MLE
|
| 実行時間 | - |
| コード長 | 2,377 bytes |
| コンパイル時間 | 294 ms |
| コンパイル使用メモリ | 82,108 KB |
| 実行使用メモリ | 583,228 KB |
| 最終ジャッジ日時 | 2025-04-16 15:52:48 |
| 合計ジャッジ時間 | 10,766 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 5 MLE * 1 -- * 29 |
ソースコード
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()
lam6er