Submission #47966425
Source Code Expand
class BIT
def initialize n
@a = [1]*(n+1) # 1-indexed internally
1.upto(n){|i|
j = i+(i&-i)
@a[j] += @a[i] if j<=n
}
end
def [] i
i += 1
s = 0
while 0<i
s += @a[i]
i &= i-1
end
return s
end
def lb s
z = @a.size-1
i,t,b = 0,0,1<<z.bit_length
t += @a[i|=b] if i|b<=z && t+@a[i|b]<s while 0<b >>= 1
return i if i<z # i は1大きい内部インデックス(もしくは 0)だけど、求めた添字が s より小さい値を返す最大の添字であり、s 以上を返す最小の添字としては +1 したものを返したいから、足し引きして内部インデックスそのままの値を返す(アクセス可能な範囲(0..z-1)なら)。
end
def add i,d
i += 1
while i<@a.size
@a[i] += d
i += i&-i
end
end
def inc i; add i,1 end
def dec i; add i,-1 end
end
(N,Q),A,*Qry = $<.map{|ln| ln.split.map(&:to_i) }
X = (A|Qry.map{_2}).sort
X.pop while X[0]&&X.size<=X[-1]
Z = X.size
M = BIT.new Z
T = [0]*Z
A.each{|a|
M.dec a if a<Z && 1==T[a] += 1
}
A.unshift nil
puts Qry.map{|i,x|
a,A[i] = A[i],x
M.inc a if a<Z && 0==T[a] -= 1
M.dec x if x<Z && 1==T[x] += 1
next M.lb(1)||Z
}
Submission Info
| Submission Time | |
|---|---|
| Task | E - Mex and Update |
| User | ds14050 |
| Language | Ruby (ruby 3.2.2) |
| Score | 475 |
| Code Size | 1211 Byte |
| Status | AC |
| Exec Time | 642 ms |
| Memory | 58604 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 475 / 475 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | sample_01.txt |
| All | hack_01.txt, hack_02.txt, hack_03.txt, hack_04.txt, sample_01.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| hack_01.txt | AC | 642 ms | 45920 KiB |
| hack_02.txt | AC | 572 ms | 46464 KiB |
| hack_03.txt | AC | 608 ms | 56036 KiB |
| hack_04.txt | AC | 606 ms | 56236 KiB |
| sample_01.txt | AC | 44 ms | 17132 KiB |
| test_01.txt | AC | 43 ms | 16736 KiB |
| test_02.txt | AC | 44 ms | 16996 KiB |
| test_03.txt | AC | 343 ms | 40320 KiB |
| test_04.txt | AC | 350 ms | 40084 KiB |
| test_05.txt | AC | 385 ms | 40304 KiB |
| test_06.txt | AC | 389 ms | 41928 KiB |
| test_07.txt | AC | 469 ms | 57564 KiB |
| test_08.txt | AC | 371 ms | 39744 KiB |
| test_09.txt | AC | 401 ms | 39884 KiB |
| test_10.txt | AC | 404 ms | 44772 KiB |
| test_11.txt | AC | 458 ms | 58020 KiB |
| test_12.txt | AC | 532 ms | 56044 KiB |
| test_13.txt | AC | 507 ms | 45812 KiB |
| test_14.txt | AC | 575 ms | 46140 KiB |
| test_15.txt | AC | 577 ms | 45900 KiB |
| test_16.txt | AC | 638 ms | 58148 KiB |
| test_17.txt | AC | 621 ms | 57816 KiB |
| test_18.txt | AC | 564 ms | 46832 KiB |
| test_19.txt | AC | 551 ms | 46372 KiB |
| test_20.txt | AC | 611 ms | 58160 KiB |
| test_21.txt | AC | 596 ms | 58604 KiB |
| test_22.txt | AC | 592 ms | 46116 KiB |
| test_23.txt | AC | 602 ms | 46864 KiB |
| test_24.txt | AC | 599 ms | 46020 KiB |
| test_25.txt | AC | 589 ms | 45776 KiB |
| test_26.txt | AC | 351 ms | 42208 KiB |
| test_27.txt | AC | 591 ms | 44780 KiB |
| test_28.txt | AC | 555 ms | 45868 KiB |
| test_29.txt | AC | 496 ms | 46364 KiB |
| test_30.txt | AC | 555 ms | 55564 KiB |