// codesnip-guard: RangeArithmeticProgressionAdd #[cfg_attr(any(),rustfmt::skip)]pub use self::range_ap_add::RangeArithmeticProgressionAdd;#[cfg_attr(any(),rustfmt::skip)]mod range_ap_add{#[derive(Debug,Clone)]pub struct RangeArithmeticProgressionAdd{pub dd:Vec}impl RangeArithmeticProgressionAdd{pub fn new(n:usize)->Self{Self{dd:vec![0;n]}}#[doc=" add a, a+d, ..., a+(k-1)d into [l, l + k)"]pub fn update(&mut self,l:usize,k:usize,a:i64,d:i64){if let Some(e)=self.dd.get_mut(l){*e+=a;}if let Some(e)=self.dd.get_mut(l+1){*e+=d-a;}if let Some(e)=self.dd.get_mut(l+k){*e+=-a-k as i64*d;}if let Some(e)=self.dd.get_mut(l+k+1){*e+=a+(k as i64-1)*d;}}#[doc=" add a, a+d, ..., a+(k-1)d into [l, l + k)"]pub fn update_isize(&mut self,l:isize,k:usize,a:i64,d:i64){if l<0{let r=l+k as isize;if r>0{self.update(0,r as usize,a-l as i64*d,d);}}else{self.update(l as usize,k,a,d);}}pub fn build_inplace(&mut self){for _ in 0..2{for i in 1..self.dd.len(){self.dd[i]+=self.dd[i-1];}}}}}