Buggy python submission (verdict: Time Limit Exceeded):
import sys, collections, heapq
def input(): return sys.stdin.readline().strip()

def main():
    """
    スマートそうな別解を見つけたのでこちらも解読してみる
    https://atcoder.jp/contests/abc128/submissions/5654668
    """
    N, Q = map(int, input().split())
    add = []
    delete = []
    for i in range(N):
        S, T, X = map(int, input().split())
        add.append((S - X, X))
        delete.append((T - X, X))
    heapq.heapify(add)
    heapq.heapify(delete)

    """
    以下自力で思いつける気がしないぞ。工事一つずつ見て行って引っかかりうるものを検査している。
    d1,...,dQは昇順に並んでいるので、
        前の人で工事に引っかかりうる　→　次の人も工事に引っかかりうる
        前の人が実は工事に引っかからない　→　次の人も実は工事に引っかからない
    により、引っかかりうる工事の集合はQ回のループで使いまわせる。
    """

    active = []
    to_delete = collections.defaultdict(int)
    for _ in range(Q):
        x = int(input())
        while add and add[0][0] <= x: # xが工事に引っかかる可能性があれば、工事座標をactiveに追加
            S, X = heapq.heappop(add)
            heapq.heappush(active, X)

        while delete and delete[0][0] <= x: # xが工事終了後に工事現場を通過する場合、それをto_deleteに記録
            T, X = heapq.heappop(delete)
            to_delete[X] += 1

        while active and to_delete[active[0]] > 0: # 工事に引っかかる可能性のあるもので、実は工事に引っかからないものは除外
            to_delete[active[0]] -= 1
            heapq.heappop(active)

        print(active[0] if active else -1) # 一巡してもactiveは空になっていないことに注意


if __name__ == "__main__":
    main()


Fixed submission:
import sys
from bisect import bisect_left
def input(): return sys.stdin.readline().strip()

def main():
    """
    計算量の落とし方が全くわからんので以下のコードを参考に写経。。。
    https://atcoder.jp/contests/abc128/submissions/7712981
    """
    N, Q = map(int, input().split())
    work = []
    for _ in range(N):
        s, t, x = map(int, input().split())
        work.append((x, s - x, t - x))
    work.sort(key=lambda x: (x[0], x[1]))
    start = [int(input()) for _ in range(Q)]

    """
    工事箇所を原点にスライドさせる事で考察を易化しておく。
    各工事(x, s, t)に対して（既にs, tは原点への移動を考慮済み）s<=d<tなるdの個数を求めたい
    startは既に昇順に並んでいるので二分探索でs<=d_i<d_{i+1}<...<d_{j-1}<tなるi=left, j=rightを求める。

    そのあと[left, right)をxで埋めていくが、愚直に(right-left)回xを代入していくとO(Q)かかってTLEするので
    skip[left]=(以前に[left, right)を埋めたときのright)を格納しておく。
    これによりansの表を毎度全走査しなくてもよくなり書き込み範囲のオーバーラップがだいぶ削減される。

    しかしskipを使っても飛んだ先がまたskip命令入ってる可能性もあるから、AC出来るのはやや偶然感あり。。。
    """

    ans = [-1] * Q
    skip = [-1] * Q
    for x, s, t in work:
        left = bisect_left(start, s)
        right = bisect_left(start, t)
        while left < right:
            if skip[left] == -1:
                ans[left] = x
                skip[left] = right
                left += 1
            else:
                left = skip[left]

    for i in range(Q):
        print(ans[i])




if __name__ == "__main__":
    main()

Buggy python submission (verdict: Time Limit Exceeded):
N, Q = map(int, input().split())
K = ['NUL' for i in range(N)]
for i in range(N):
        K[i] = list(map(int, input().split()))
K.sort(key=lambda x: x[2]) # 通行止め座標が小さい順にソート

for i in range(Q):
        D = int(input())
        okvalue = 0
        i = 0
        while i < N and okvalue == 0:
                collision_time = D + K[i][2]
                if K[i][0] - 0.5 < collision_time < K[i][1] - 0.5:
                        okvalue = 1
                else:
                        i += 1
        
        if i < N:
                print(K[i][2])
        else:
                print(-1)

Fixed submission:
import sys
from bisect import bisect_left
def input(): return sys.stdin.readline().strip()

def main():
    """
    計算量の落とし方が全くわからんので以下のコードを参考に写経。。。
    https://atcoder.jp/contests/abc128/submissions/7712981
    """
    N, Q = map(int, input().split())
    work = []
    for _ in range(N):
        s, t, x = map(int, input().split())
        work.append((x, s - x, t - x))
    work.sort(key=lambda x: (x[0], x[1]))
    start = [int(input()) for _ in range(Q)]

    """
    工事箇所を原点にスライドさせる事で考察を易化しておく。
    各工事(x, s, t)に対して（既にs, tは原点への移動を考慮済み）s<=d<tなるdの個数を求めたい
    startは既に昇順に並んでいるので二分探索でs<=d_i<d_{i+1}<...<d_{j-1}<tなるi=left, j=rightを求める。

    そのあと[left, right)をxで埋めていくが、愚直に(right-left)回xを代入していくとO(Q)かかってTLEするので
    skip[left]=(以前に[left, right)を埋めたときのright)を格納しておく。
    これによりansの表を毎度全走査しなくてもよくなり書き込み範囲のオーバーラップがだいぶ削減される。

    しかしskipを使っても飛んだ先がまたskip命令入ってる可能性もあるから、AC出来るのはやや偶然感あり。。。
    """

    ans = [-1] * Q
    skip = [-1] * Q
    for x, s, t in work:
        left = bisect_left(start, s)
        right = bisect_left(start, t)
        while left < right:
            if skip[left] == -1:
                ans[left] = x
                skip[left] = right
                left += 1
            else:
                left = skip[left]

    for i in range(Q):
        print(ans[i])




if __name__ == "__main__":
    main()