提出 #76691343


ソースコード 拡げる

from atcoder.segtree import SegTree
import math
import heapq
def solve(n:int,m:int,lrs:list[tuple[int,int]]):
    rls=[(r-1,l-1) for l,r in lrs]
    rls.sort()
    ls=[rls[i][1] for i in range(m)]
    def op(a,b):
        return min(a,b)
    st=SegTree(min,math.inf,ls)
    def nibtan(x:int):#位置x以上のrのもので最小のl
        ok=m
        ng=-1
        mid=0
        while abs(ok-ng)>1:
            mid=(ok+ng)//2
            if rls[mid][0]>=x:
                ok=mid
            else:
                ng=mid
        if ok==m:
            return n+10
        return st.prod(ok,m)
    mex=[i+1 for i in range(n+1)]
    heapq.heapify(mex)
    kul=0
    sakuzyo=set()
    ans=[]
    inai=set()
    def tuika(x:int):#区間にxを追加する#ただしxは区間に含まれない数のはず
        sakuzyo.add(x)

        while mex[0] in sakuzyo:
            kesu=heapq.heappop(mex)
            inai.add(kesu)
            sakuzyo.discard(kesu)
        return 
    def lup(kul):
        if ans[kul] in sakuzyo:
            sakuzyo.discard(ans[kul])
        else:
            if ans[kul] not in inai:
                return
            heapq.heappush(mex,ans[kul])
            inai.discard(ans[kul])
    def reset(inai,sakuzyo):
        for item in inai:
            heapq.heappush(mex,item)
        
        return 
            

    for i in range(n):
        minl=nibtan(i)
        if minl>i:
            ans.append(1)
            kul=i+1
            reset(inai,sakuzyo)
            inai=set()
            sakuzyo=set()
        else:
            while minl>kul:
                lup(kul)
                kul+=1
            atai=mex[0]
            ans.append(atai)
            tuika(atai)
    
    return tuple(ans)

            
        
        


        
        


    



if __name__=="__main__":
    for _ in range(int(input())):
        n,m=map(int,input().split())
        lrs=[tuple(map(int,input().split())) for i in range(m)]
        print(*solve(n,m,lrs))

提出情報

提出日時
問題 A - Colorful Intervals
ユーザ st0123
言語 Python (PyPy 3.11-v7.3.20)
得点 300
コード長 2072 Byte
結果 AC
実行時間 889 ms
メモリ 187400 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 300 / 300
結果
AC × 1
AC × 30
セット名 テストケース
Sample 01_sample_01.txt
All 01_sample_01.txt, 02_small_01.txt, 02_small_02.txt, 03_rand_1_01.txt, 03_rand_1_02.txt, 03_rand_1_03.txt, 03_rand_1_04.txt, 03_rand_1_05.txt, 04_rand_2_01.txt, 04_rand_2_02.txt, 04_rand_2_03.txt, 04_rand_2_04.txt, 04_rand_2_05.txt, 05_rand_3_01.txt, 05_rand_3_02.txt, 05_rand_3_03.txt, 05_rand_3_04.txt, 05_rand_3_05.txt, 05_rand_3_06.txt, 05_rand_3_07.txt, 05_rand_3_08.txt, 05_rand_3_09.txt, 05_rand_3_10.txt, 06_other_01.txt, 06_other_02.txt, 06_other_03.txt, 06_other_04.txt, 06_other_05.txt, 06_other_06.txt, 06_other_07.txt
ケース名 結果 実行時間 メモリ
01_sample_01.txt AC 132 ms 111464 KiB
02_small_01.txt AC 752 ms 116924 KiB
02_small_02.txt AC 785 ms 117060 KiB
03_rand_1_01.txt AC 847 ms 117504 KiB
03_rand_1_02.txt AC 834 ms 116408 KiB
03_rand_1_03.txt AC 830 ms 117216 KiB
03_rand_1_04.txt AC 825 ms 116728 KiB
03_rand_1_05.txt AC 840 ms 117940 KiB
04_rand_2_01.txt AC 831 ms 138872 KiB
04_rand_2_02.txt AC 844 ms 140792 KiB
04_rand_2_03.txt AC 866 ms 141564 KiB
04_rand_2_04.txt AC 809 ms 134376 KiB
04_rand_2_05.txt AC 803 ms 137832 KiB
05_rand_3_01.txt AC 478 ms 163312 KiB
05_rand_3_02.txt AC 617 ms 150620 KiB
05_rand_3_03.txt AC 824 ms 187088 KiB
05_rand_3_04.txt AC 644 ms 156424 KiB
05_rand_3_05.txt AC 639 ms 176396 KiB
05_rand_3_06.txt AC 783 ms 158936 KiB
05_rand_3_07.txt AC 582 ms 145484 KiB
05_rand_3_08.txt AC 539 ms 140768 KiB
05_rand_3_09.txt AC 592 ms 171408 KiB
05_rand_3_10.txt AC 652 ms 178684 KiB
06_other_01.txt AC 581 ms 114704 KiB
06_other_02.txt AC 357 ms 155400 KiB
06_other_03.txt AC 889 ms 187400 KiB
06_other_04.txt AC 628 ms 159940 KiB
06_other_05.txt AC 626 ms 163248 KiB
06_other_06.txt AC 479 ms 154316 KiB
06_other_07.txt AC 576 ms 185200 KiB