Submission #66713738
Source Code Expand
class RsqSegmentTree
attr_reader :size, :dat
def initialize(n)
@leafs = 1
@leafs *= 2 while @leafs < n
@dat = Array.new(size, 0)
end
def size = 2 * @leafs - 1
def update(pos, x)
index = pos + (size / 2)
@dat[index] = x
while index > 0
index = parent(index)
left_child = left_child(index)
right_child = right_child(index)
@dat[index] = [@dat[left_child], @dat[right_child]].sum
end
end
# [l, r)
# [a, b)
def query(l, r, a=0, b=@leafs, index=0)
return @dat[index] if (l <= a && b <= r)
return 0 if (b <= l || r <= a)
mid = (a + b) / 2
left_ret = query(l, r, a, mid, left_child(index))
right_ret = query(l, r, mid, b, right_child(index))
[left_ret, right_ret].sum
end
private
def parent(child) = (child - 1) / 2
def left_child(parent) = 2 * parent + 1
def right_child(parent) = 2 * parent + 2
end
n, q = gets.split.map(&:to_i)
segment_tree = RsqSegmentTree.new(n)
q.times do
case gets.split.map(&:to_i)
in [1, pos, x]
segment_tree.update(pos - 1, x)
in [2, l, r]
puts segment_tree.query(l - 1, r - 1)
end
end
Submission Info
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
1000 / 1000 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
sample_01.txt |
| All |
max_01.txt, max_02.txt, max_03.txt, max_04.txt, min_01.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, sample_01.txt, special_01.txt, special_02.txt, special_03.txt, special_04.txt, special_05.txt |
| Case Name |
Status |
Exec Time |
Memory |
| max_01.txt |
AC |
487 ms |
19604 KiB |
| max_02.txt |
AC |
495 ms |
19532 KiB |
| max_03.txt |
AC |
336 ms |
19644 KiB |
| max_04.txt |
AC |
502 ms |
19440 KiB |
| min_01.txt |
AC |
43 ms |
17176 KiB |
| random_01.txt |
AC |
426 ms |
19576 KiB |
| random_02.txt |
AC |
485 ms |
19508 KiB |
| random_03.txt |
AC |
355 ms |
19604 KiB |
| random_04.txt |
AC |
468 ms |
19416 KiB |
| random_05.txt |
AC |
401 ms |
19452 KiB |
| random_06.txt |
AC |
406 ms |
18576 KiB |
| random_07.txt |
AC |
461 ms |
18508 KiB |
| random_08.txt |
AC |
418 ms |
19568 KiB |
| sample_01.txt |
AC |
43 ms |
17160 KiB |
| special_01.txt |
AC |
309 ms |
19488 KiB |
| special_02.txt |
AC |
309 ms |
19616 KiB |
| special_03.txt |
AC |
518 ms |
19540 KiB |
| special_04.txt |
AC |
507 ms |
19332 KiB |
| special_05.txt |
AC |
435 ms |
19556 KiB |