1. paizaラーニングトップ
  2. レベルアップ問題集
  3. Binary Indexed Treeメニュー(言語選択)
  4. 問題一覧 Kotlin編
  5. BITの区間総和 2 : BITの区間総和 Kotlin編

Binary Indexed Treeメニューのサムネイル
BITの区間総和 2 : BITの区間総和 Kotlin編(paizaランク A 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

問題

下記の問題をプログラミングしてみよう!

(BITの区間総和について)



問題 6 で行ったインデックス計算の途中で、適宜 BIT_m の値を足すことにより、計算が出来ます。

実際に行ってみましょう。

(問題)



長さ n の配列 A = (A_1, A_2, ..., A_n) が与えられます。Q 個のクエリが与えられるので、順番に処理してください。i (1 ≦ i ≦ Q) 番目のクエリは以下の通りです。

  • 前 t_i 項の和、つまり、A_1 + A_2 + ... + A_{t_i} を求める。
  • 入力される値

    入力は以下のフォーマットで与えられます。


    n
    A_1 A_2 ... A_n
    Q
    t_1
    t_2
    ...
    t_Q

  • 1 行目には 1 つの整数 n が与えられます。

  • 2 行目には n 個の整数 A_1, A_2, ..., A_n が与えられます。

  • 3 行目には 1 つの整数 Q が与えられます。

  • 3 + i (1 ≦ i ≦ Q) 行目には 1 つの整数 t_i が与えられます。

  • 入力は合計 3 + Q 行からなり、入力値最終行の末尾に改行を 1 つ含みます。

  • 入力値最終行の末尾に改行が1つ入ります。
    文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください
    期待する出力

    答えを Q 行で出力してください。

    i (1 ≦ i ≦ Q) 行目には、i 番目のクエリの答えを出力してください。

    条件

    すべてのテストケースについて以下の条件を満たします。


    • 1 ≦ n ≦ 200000

    • 1 ≦ A_i ≦ 10 ^ 9 (1 ≦ i ≦ n)

    • 1 ≦ Q ≦ 200000

    • 1 ≦ t_i ≦ n (1 ≦ i ≦ Q)

    入力例1

    10
    3 1 4 1 5 9 2 6 5 3
    10
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    出力例1

    3
    4
    8
    9
    14
    23
    25
    31
    36
    39

    問題一覧へ戻る

    ページの先頭へ戻る