competitive_library/algorithm/
cumsum.rs

1//! 累積和
2pub fn cumsum(v: &[i64]) -> Vec<i64> {
3    (0..1)
4        .chain(v.iter().scan(0, |c, &x| {
5            *c += x;
6            Some(*c)
7        }))
8        .collect()
9}
10
11#[cfg(test)]
12mod tests {
13    use super::*;
14    #[test]
15    fn test_cumsum() {
16        let v = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
17        let cumsum = cumsum(&v);
18        assert_eq!(&cumsum, &[0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55]);
19    }
20}