Buggy python submission (verdict: Time Limit Exceeded):
import sys
input=sys.stdin.readline
if __name__ == '__main__':
    N,Q=list(map(int,input().split()))
    constructions=[list(map(int,input().split())) for i in range(N)]
    D=[int(input()) for i in range(Q)]
    ans={i:-1 for i in range(Q)}
    constructions.sort(key=lambda x:x[2])

    for i,p in enumerate(D):
        for construction in constructions:
            S=construction[0]
            T=construction[1]
            X=construction[2]
            if S<=X+p<T:
                ans[i]=X
                break
    for i in ans.values():
        print(i)


Fixed submission:
import bisect
import sys
input = sys.stdin.readline


n, q = map(int, input().split())
events = [list(map(int, input().split())) for _ in range(n)]
events.sort(key=lambda x: x[2])

departures = [int(input()) for _ in range(q)]


ans = ['-1'] * q
skip = [-1] * q

for start, end, pos in events:
    left = bisect.bisect_left(departures, start-pos)
    right = bisect.bisect_left(departures, end-pos)

    while left < right:
        if skip[left] == -1:
            ans[left] = str(pos)
            skip[left] = right
            left += 1

        else:
            left = skip[left]

print('\n'.join(ans))

Buggy python submission (verdict: Time Limit Exceeded):
if __name__ == '__main__':
    N,Q=list(map(int,input().split()))
    events=[list(map(int,input().split())) for _ in range(N)]
    D=[int(input()) for i in range(Q)]
    ans=["-1"]*Q
    skip=[-1]*Q
    events.sort(key=lambda x:x[2])
    import bisect
    for S,T,X in events:
        right=bisect.bisect_left(D,T-X)
        left=bisect.bisect_left(D,S-X)
        while left<right:
            if skip[left]==-1:
                ans[left]=str(X)
                skip[left]=right
                left+=1
            else:
                left=skip[left]
    print("\n".join(ans))


Fixed submission:
import bisect
import sys
input = sys.stdin.readline


n, q = map(int, input().split())
events = [list(map(int, input().split())) for _ in range(n)]
events.sort(key=lambda x: x[2])

departures = [int(input()) for _ in range(q)]


ans = ['-1'] * q
skip = [-1] * q

for start, end, pos in events:
    left = bisect.bisect_left(departures, start-pos)
    right = bisect.bisect_left(departures, end-pos)

    while left < right:
        if skip[left] == -1:
            ans[left] = str(pos)
            skip[left] = right
            left += 1

        else:
            left = skip[left]

print('\n'.join(ans))

Buggy python submission (verdict: Time Limit Exceeded):
if __name__ == '__main__':
    N,Q=list(map(int,input().split()))
    events=[list(map(int,input().split())) for _ in range(N)]
    D=[int(input()) for i in range(Q)]
    ans=[-1]*Q
    skip=[-1]*Q
    events.sort(key=lambda x:x[2])
    import bisect
    for S,T,X in events:
        right=bisect.bisect_left(D,T-X)
        left=bisect.bisect_left(D,S-X)
        while left<right:
            if skip[left]==-1:
                ans[left]=X
                skip[left]=right
                left+=1
            else:
                left=skip[left]
    for i in ans:
        print(i)


Fixed submission:
import bisect
import sys
input = sys.stdin.readline


n, q = map(int, input().split())
events = [list(map(int, input().split())) for _ in range(n)]
events.sort(key=lambda x: x[2])

departures = [int(input()) for _ in range(q)]


ans = ['-1'] * q
skip = [-1] * q

for start, end, pos in events:
    left = bisect.bisect_left(departures, start-pos)
    right = bisect.bisect_left(departures, end-pos)

    while left < right:
        if skip[left] == -1:
            ans[left] = str(pos)
            skip[left] = right
            left += 1

        else:
            left = skip[left]

print('\n'.join(ans))

Buggy python submission (verdict: Time Limit Exceeded):


if __name__ == '__main__':
    N,Q=list(map(int,input().split()))
    constructions=[list(map(int,input().split())) for i in range(N)]
    D=[int(input()) for i in range(Q)]
    ans={i:-1 for i in range(Q)}
    constructions.sort(key=lambda x:x[2])

    for i,p in enumerate(D):
        for construction in constructions:
            S=construction[0]
            T=construction[1]
            X=construction[2]
            if S<=X+p<T:
                ans[i]=X
                break
    for i in ans.values():
        print(i)


Fixed submission:
import bisect
import sys
input = sys.stdin.readline


n, q = map(int, input().split())
events = [list(map(int, input().split())) for _ in range(n)]
events.sort(key=lambda x: x[2])

departures = [int(input()) for _ in range(q)]


ans = ['-1'] * q
skip = [-1] * q

for start, end, pos in events:
    left = bisect.bisect_left(departures, start-pos)
    right = bisect.bisect_left(departures, end-pos)

    while left < right:
        if skip[left] == -1:
            ans[left] = str(pos)
            skip[left] = right
            left += 1

        else:
            left = skip[left]

print('\n'.join(ans))