結果
| 問題 |
No.3094 Stapler
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-04-05 01:22:19 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 1,192 ms / 2,000 ms |
| コード長 | 1,934 bytes |
| コンパイル時間 | 271 ms |
| コンパイル使用メモリ | 82,636 KB |
| 実行使用メモリ | 90,624 KB |
| 最終ジャッジ日時 | 2025-10-23 22:20:57 |
| 合計ジャッジ時間 | 51,669 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 72 |
ソースコード
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)