結果

問題 No.3094 Stapler
ユーザー autumn09
提出日時 2025-04-05 01:22:19
言語 PyPy3
(7.3.15)
結果
RE  
(最新)
AC  
(最初)
実行時間 -
コード長 1,934 bytes
コンパイル時間 187 ms
コンパイル使用メモリ 82,224 KB
実行使用メモリ 90,356 KB
最終ジャッジ日時 2025-06-20 02:29:52
合計ジャッジ時間 51,134 ms
ジャッジサーバーID
(参考情報)
judge2 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 71 RE * 1
権限があれば一括ダウンロードができます

ソースコード

diff #

N=int(input())

block_size=1000
block_covered=[0]*1001
block_zerocount=[0]*1001
block_detail=[[0]*block_size for i in range(1001)]

def calc_block(i):
    return i//block_size, i%block_size

for i in range(N):
    block_zerocount[calc_block(i)[0]]+=1

Query_memo={}

Q=int(input())
for i in range(1,Q+1):
    q=list(map(int,input().split()))
    if q[0]==1:
        L=q[1]-1
        R=q[2]-1
        lb, li=calc_block(L)
        rb, ri=calc_block(R)
        Query_memo[i]=(L,R)
        if lb==rb:
            for j in range(li,ri):
                block_detail[lb][j]+=1
                if block_detail[lb][j]==1:
                    block_zerocount[lb]-=1
        else:
            for j in range(li,block_size):
                block_detail[lb][j]+=1
                if block_detail[lb][j]==1:
                    block_zerocount[lb]-=1
            for j in range(ri):
                block_detail[rb][j]+=1
                if block_detail[rb][j]==1:
                    block_zerocount[rb]-=1
            for b in range(lb+1, rb):
                block_covered[b]+=1
    elif q[0]==2:
        L,R=Query_memo[q[1]]
        lb, li=calc_block(L)
        rb, ri=calc_block(R)
        if lb==rb:
            for j in range(li,ri):
                block_detail[lb][j]-=1
                if block_detail[lb][j]==0:
                    block_zerocount[lb]+=1
        else:
            for j in range(li,block_size):
                block_detail[lb][j]-=1
                if block_detail[lb][j]==0:
                    block_zerocount[lb]+=1
            for j in range(ri):
                block_detail[rb][j]-=1
                if block_detail[rb][j]==0:
                    block_zerocount[rb]+=1
            for b in range(lb+1, rb):
                block_covered[b]-=1
    else:
        ans=0
        for j in range(1001):
            if block_covered[j]:
                continue
            ans+=block_zerocount[j]
        print(ans)
0