結果
| 問題 |
No.1802 Range Score Query for Bracket Sequence
|
| コンテスト | |
| ユーザー |
kona0001
|
| 提出日時 | 2023-03-14 04:40:39 |
| 言語 | Ruby (3.4.1) |
| 結果 |
AC
|
| 実行時間 | 1,058 ms / 2,000 ms |
| コード長 | 1,003 bytes |
| コンパイル時間 | 82 ms |
| コンパイル使用メモリ | 7,552 KB |
| 実行使用メモリ | 32,128 KB |
| 最終ジャッジ日時 | 2024-09-18 07:53:28 |
| 合計ジャッジ時間 | 18,385 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 24 |
コンパイルメッセージ
Syntax OK
ソースコード
class BIT
attr_accessor(:arr, :size)
def initialize(n)
@size = n
@arr = Array.new(@size+1,0)
end
def add(i,x)
i += 1
while i <= @size
@arr[i] += x
i += i & -i
end
end
def sum(i)
i += 1
sum = 0
while i > 0
sum += @arr[i]
i &= i - 1
end
sum
end
end
n,q = gets.split.map(&:to_i)
s = gets.chomp.chars
bit = BIT.new(n)
n.times do |i|
next if i==0
if s[i] == ")" && s[i-1] == "("
bit.add(i,1)
end
end
ans = []
q.times do
query = gets.split.map(&:to_i)
if query[0]==1
i = query[1]-1
if s[i] == "("
if 0 <= i-1 && s[i-1] == "("
bit.add(i,1)
end
if i+1 < n && s[i+1] == ")"
bit.add(i+1,-1)
end
s[i] = ")"
else
if 0 <= i-1 && s[i-1] == "("
bit.add(i,-1)
end
if i+1 < n && s[i+1] == ")"
bit.add(i+1,1)
end
s[i] = "("
end
else
l,r = query[1]-1,query[2]-1
ans << bit.sum(r) - bit.sum(l)
end
end
puts ans
kona0001