結果
| 問題 |
No.1705 Mode of long array
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-11-30 12:49:18 |
| 言語 | Ruby (3.4.1) |
| 結果 |
AC
|
| 実行時間 | 2,005 ms / 3,000 ms |
| コード長 | 742 bytes |
| コンパイル時間 | 207 ms |
| コンパイル使用メモリ | 7,424 KB |
| 実行使用メモリ | 30,592 KB |
| 最終ジャッジ日時 | 2024-07-03 07:08:56 |
| 合計ジャッジ時間 | 58,988 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 51 |
コンパイルメッセージ
Syntax OK
ソースコード
class SegmentTree
def initialize(n)
@n = 1
while @n < n do
@n *= 2
end
@dat = Array.new(2*@n-1, Array.new(2, -1))
end
def update(k, a)
i = k
k += @n - 1
@dat[k] = [a, i]
while k > 0 do
k = (k - 1) / 2
@dat[k] = [@dat[k * 2 + 1], @dat[k * 2 + 2]].max
end
end
def max
@dat[0][1] + 1
end
def dat(i)
@dat[i + @n - 1][0]
end
end
N, M = gets.split(" ").map{|s| s.to_i}
a = gets.split(" ").map{|s| s.to_i}
tree = SegmentTree.new(M)
a.each_with_index {|x, i|
tree.update(i, x)
}
Q = gets.to_i
q = []
Q.times {
q << gets.split(" ").map{|s| s.to_i}
}
q.each {|t, x, y|
if t == 1 then
tree.update(x-1, tree.dat(x-1) + y)
elsif t == 2 then
tree.update(x-1, tree.dat(x-1) - y)
else
puts tree.max
end
}