こんにちは、ナナオです。

前回に引き続き競プロを実施していきたいと思います。

今回の問題は以下です。

累積和の計算 | レベルアップ問題集 | プログラミング学習サイト【paizaラーニング】

実装

以下のように実装しました。

package main
import "fmt"
func main(){
    var n, m int
    fmt.Scan(&n)
    s := make([]int, n)
    for i := 0; i < n; i++ {
        var a int
        fmt.Scan(&a)
        if i > 0 {
            s[i] = s[i - 1] + a
        } else {
            s[i] = a
        }
    }
    fmt.Scan(&m)
    for i := 0; i < m; i++ {
        var l, r int
        fmt.Scan(&l, &r)
        if l > 1 {
            fmt.Println(s[r] - s[l - 1])
        } else {
            fmt.Println(s[r])
        }
        
    }
}

ですが、これだとテストがすべて動作しませんでした。

解説コードを見て修正します。

package main
import "fmt"
func main(){
    var n, m int
    fmt.Scan(&n)
    a := make([]int, n)
    s := make([]int, n)
    x := 0
    for i := 0; i < n; i++ {
        fmt.Scan(&a[i])
        x += a[i]
        s[i] = x
    }
    fmt.Scan(&m)
    for i := 0; i < m; i++ {
        var l, r int
        fmt.Scan(&l, &r)
        fmt.Println(s[r] - s[l] + a[l])
    }
}

これで動くようになりました👍