結果
問題 | No.674 n連勤 |
ユーザー |
![]() |
提出日時 | 2025-03-20 20:38:19 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,107 ms / 2,000 ms |
コード長 | 1,663 bytes |
コンパイル時間 | 364 ms |
コンパイル使用メモリ | 82,108 KB |
実行使用メモリ | 106,476 KB |
最終ジャッジ日時 | 2025-03-20 20:38:47 |
合計ジャッジ時間 | 5,049 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 17 |
ソースコード
import bisect def main(): import sys input = sys.stdin.read data = input().split() idx = 0 D = int(data[idx]) idx += 1 Q = int(data[idx]) idx += 1 queries = [] for _ in range(Q): A = int(data[idx]) B = int(data[idx+1]) queries.append((A, B)) idx += 2 intervals = [] max_len = 0 for A, B in queries: if not intervals: new_start, new_end = A, B current_length = new_end - new_start + 1 if current_length > max_len: max_len = current_length bisect.insort(intervals, (new_start, new_end)) print(max_len) continue starts = [interval[0] for interval in intervals] i = bisect.bisect_left(starts, A) new_start = A new_end = B left = i - 1 while left >= 0 and intervals[left][1] >= new_start - 1: new_start = min(intervals[left][0], new_start) new_end = max(intervals[left][1], new_end) left -= 1 right = i while right < len(intervals) and intervals[right][0] <= new_end + 1: new_end = max(new_end, intervals[right][1]) right += 1 del_start = left + 1 del_end = right if del_start < del_end: del intervals[del_start:del_end] bisect.insort(intervals, (new_start, new_end)) current_length = new_end - new_start + 1 if current_length > max_len: max_len = current_length print(max_len) if __name__ == "__main__": main()