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}