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

Submission Time
Task A59 - RSQ (Range Sum Queries)
User hashimoto_kei
Language Ruby (ruby 3.2.2)
Score 1000
Code Size 1183 Byte
Status AC
Exec Time 518 ms
Memory 19644 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 1000 / 1000
Status
AC × 1
AC × 19
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