#![allow(unused_imports)] #![allow(non_snake_case)] use std::cmp::*; use std::collections::*; use std::io::Write; #[allow(unused_macros)] macro_rules! debug { ($($e:expr),*) => { #[cfg(debug_assertions)] $({ let (e, mut err) = (stringify!($e), std::io::stderr()); writeln!(err, "{} = {:?}", e, $e).unwrap() })* }; } fn main() { let v = read_vec::(); let (n, q) = (v[0], v[1]); let mut a = read_vec::(); let mut queries = vec![]; for i in 0..q { let v = read_vec::(); let c = v[0].chars().next().unwrap(); let x: i64 = v[1].parse().ok().unwrap(); let y: i64 = v[2].parse().ok().unwrap(); queries.push((c, x, y)); } let mut seg = LazySegmentTree::new(n); let mut b = vec![0; n]; for (c, x, y) in queries { if c == 'A' { let x = x as usize - 1; let count = seg.getsum(x, x + 1, 0, 0, n); b[x] += a[x] * count; seg.add(x, x + 1, -count, 0, 0, n); a[x] += y; } else { seg.add(x as usize - 1, y as usize, 1, 0, 0, n); } } for i in 0..n { b[i] += a[i] * seg.getsum(i, i + 1, 0, 0, n); } for num in b { print!("{} ", num); } println!(""); } fn read() -> T { let mut s = String::new(); std::io::stdin().read_line(&mut s).ok(); s.trim().parse().ok().unwrap() } fn read_vec() -> Vec { read::() .split_whitespace() .map(|e| e.parse().ok().unwrap()) .collect() } #[derive(Debug)] struct LazySegmentTree { n: usize, data: Vec, datb: Vec, } impl LazySegmentTree { fn new(sz: usize) -> LazySegmentTree { let mut n = 1; while n < sz { n *= 2; } LazySegmentTree { n: n, data: vec![0i64; 2 * n - 1], datb: vec![0i64; 2 * n - 1], } } fn add(&mut self, a: usize, b: usize, x: i64, k: usize, l: usize, r: usize) { if a <= l && r <= b { self.data[k] += x; } else if l < b && a < r { self.datb[k] += (min(b, r) - max(a, l)) as i64 * x; self.add(a, b, x, k * 2 + 1, l, (l + r) / 2); self.add(a, b, x, k * 2 + 2, (l + r) / 2, r); } } fn getsum(&mut self, a: usize, b: usize, k: usize, l: usize, r: usize) -> i64 { if b <= l || r <= a { return 0; } if a <= l && r <= b { return self.data[k] * (r - l) as i64 + self.datb[k]; } else { let mut res = (min(b, r) - max(a, l)) as i64 * self.data[k]; res += self.getsum(a, b, k * 2 + 1, l, (l + r) / 2); res += self.getsum(a, b, k * 2 + 2, (l + r) / 2, r); return res; } } }