結果
| 問題 | 
                            No.1982 [Cherry 4th Tune B] 絶険
                             | 
                    
| コンテスト | |
| ユーザー | 
                             lam6er
                         | 
                    
| 提出日時 | 2025-04-15 22:15:48 | 
| 言語 | PyPy3  (7.3.15)  | 
                    
| 結果 | 
                             
                                TLE
                                 
                             
                            
                         | 
                    
| 実行時間 | - | 
| コード長 | 2,377 bytes | 
| コンパイル時間 | 304 ms | 
| コンパイル使用メモリ | 81,596 KB | 
| 実行使用メモリ | 574,984 KB | 
| 最終ジャッジ日時 | 2025-04-15 22:18:02 | 
| 合計ジャッジ時間 | 13,176 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge4 / judge1 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 5 TLE * 1 MLE * 1 -- * 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()
            
            
            
        
            
lam6er