NEPLg2 Standard Library - kpprefix
Web Playground
Web Playground

kpprefix: 競技プログラミング向け累積和ユーティリティ

目的もくてき:

実装じっそう:

注意ちゅうい:

TESTstdionormalize_newlines
#entry main
#target std
#import "kp/kpprefix" as *
#import "core/mem" as *
#import "std/stdio" as *
fn main <()*> ()> ():
    let n <i32> 5;
    let data <i32> alloc_raw mul n 4;
    store_i32 add data 0 1;
    store_i32 add data 4 2;
    store_i32 add data 8 3;
    store_i32 add data 12 4;
    store_i32 add data 16 5;
    let pref <i32> prefix_build_i32 data n;
    print_i32 prefix_range_sum_i32 pref 0 3;
    print " ";
    println_i32 prefix_range_sum_i32 pref 1 5;
    dealloc_raw pref mul add n 1 4;
    dealloc_raw data mul n 4

prefix_build_i32: data[0..n) の累積和配列 pref[0..n] を作る
prefix_range_sum_i32: 半開区間 [l, r) の和を返す
PrefixI32: i32 用累積和の安全ハンドル

目的もくてき:

注意ちゅうい:

prefix_build_vec_i32: Vec<i32> から累積和ハンドルを作る

実装じっそう:

prefix_sum_i32: ハンドルから半開区間 [l,r) の和を返す
prefix_free_i32: 累積和ハンドルのメモリを解放する