树状数组有两个低级模式,一个高级模式(万能)。
详细模板
低级模式一:区间查询+单点修改(相当于有了单点查询)
初始化:add(i,x)
单点修改:cin x,y add(x,y) 把编号为x的修改为y值。
万能查询:cin x,y cout qu(y)-qu(x-1) 单点查询时x,y相等。
低级模式二:单点查询+区间修改(相当于有了单点修改)
初始化:y=0–> i 1-n add(i,x-y) y=x
万能修改:cin x,y,z add(x,z) add(y+1,-z) 把编号为x到y的修改为z值。
单点查询:cin x cout qu(x)
高级模式(万能):区间查询+区间修改(相当于啥都有,不过复杂一点)
初始化:y=0–> i 1-n add(i,x-y,0)+add(i,(x-y)i,1) y=x
万能修改:cin x,y,z add(x,z,0) add(y+1,-z,0) add(x,zx,1) add(y+1,-z*(y+1),1)
万能查询:cin x,y cout ask(y)-ask(x-1)
ask函数:
int ask(int x)
{return ((x+1)*qu(x,0)-qu(x,1));
}