結果

問題 No.686 Uncertain LIS
ユーザー gew1fw
提出日時 2025-06-12 16:40:46
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 1,222 bytes
コンパイル時間 202 ms
コンパイル使用メモリ 82,176 KB
実行使用メモリ 87,280 KB
最終ジャッジ日時 2025-06-12 16:40:52
合計ジャッジ時間 6,188 ms
ジャッジサーバーID
(参考情報)
judge1 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 10 WA * 26
権限があれば一括ダウンロードができます

ソースコード

diff #

import bisect

n = int(input())
ranges = []
for _ in range(n):
    l, r = map(int, input().split())
    ranges.append((l, r))

tails = []
for i in range(n):
    l, r = ranges[i]
    if not tails:
        tails.append(l)
        continue
    current_max = tails[-1]
    desired = max(l, current_max + 1)
    if desired <= r:
        tails.append(desired)
    else:
        pos = bisect.bisect_left(tails, l)
        best_k = pos - 1
        if best_k >= 0:
            desired = max(l, tails[best_k] + 1)
            if desired <= r:
                if best_k + 1 >= len(tails):
                    tails.append(desired)
                else:
                    if desired < tails[best_k + 1]:
                        tails[best_k + 1] = desired
            else:
                pos = bisect.bisect_left(tails, l)
                if pos < len(tails):
                    if tails[pos] >= l:
                        tails[pos] = l
                else:
                    tails.append(l)
        else:
            pos = bisect.bisect_left(tails, l)
            if pos < len(tails):
                if tails[pos] >= l:
                    tails[pos] = l
            else:
                tails.append(l)

print(len(tails))
0