結果
問題 | No.2220 Range Insert & Point Mex |
ユーザー |
![]() |
提出日時 | 2025-03-20 21:20:26 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,182 bytes |
コンパイル時間 | 354 ms |
コンパイル使用メモリ | 82,228 KB |
実行使用メモリ | 155,136 KB |
最終ジャッジ日時 | 2025-03-20 21:21:37 |
合計ジャッジ時間 | 11,359 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 20 TLE * 1 -- * 15 |
ソースコード
import bisectimport sysdef main():input = sys.stdin.read().split()ptr = 0N = int(input[ptr])ptr += 1from collections import defaultdicta_dict = defaultdict(list)for _ in range(N):l = int(input[ptr])r = int(input[ptr+1])a = int(input[ptr+2])ptr +=3a_dict[a].append((l, r))# Merge intervals for each amerged = {}for a in a_dict:intervals = a_dict[a]intervals.sort()merged_list = []for start, end in intervals:if not merged_list:merged_list.append([start, end])else:last = merged_list[-1]if start <= last[1] + 1:# Mergenew_start = min(last[0], start)new_end = max(last[1], end)merged_list[-1] = [new_start, new_end]else:merged_list.append([start, end])merged[a] = merged_listsorted_a = sorted(merged.keys())Q = int(input[ptr])ptr +=1x_list = list(map(int, input[ptr:ptr+Q]))ptr +=Qfor x in x_list:m = 0while True:# Check if m is present in mergedpos = bisect.bisect_left(sorted_a, m)if pos < len(sorted_a) and sorted_a[pos] == m:# Check if x is covered by merged intervals of a=mintervals = merged[m]# Binary search in intervals for xL = 0R = len(intervals) -1found = Falsewhile L <= R:mid = (L + R)//2s, e = intervals[mid]if s <=x <=e:found = Truebreakelif x < s:R = mid -1else:L = mid +1if not found:print(m)breakelse:m +=1else:print(m)breakif __name__ == "__main__":main()