day 03 差分(二)

78 阅读1分钟
  1. 基本差分

    • 本质上就是前缀和的逆运算
    • 构造b1,b2...bnb_1,b_2...b_n使得a1,a2...ana_1,a_2...a_n为其前缀和
    • 基本思路b1=a1,b2=a2a1,b3=a3a2...b_1=a_1,b_2=a_2-a_1,b_3=a_3-a_2...
    • 此处也可以看成n次插入操作,例如b1b_1为在1到2之间插入a1a_1 此时b1=a1b2=a1b_1=a_1 b_2=-a_1之后在2到3之间插入a2a_2 此时b2=a2a1b_2=a_2-a_1以此类推即可
    • 插入操作:在l和r之间都加上c时bl+cb_l+c brcb_r-c
    • 作用:用O(1)的时间对原数组某一段同时加上或减去一个数
    • 基本实现:(代码和字数比有限制 懒得调了也丢图片了) code.png
  2. 二维差分

    • 和一维差分类似
    • 插入操作:在x2y2x1y1x_2y_2和x_1y_1之间加上c时 b(x1y1)+=cb_(x_1y_1)+=c b(x1y2)=cb_(x_1y_2)-=c b(x2y1)=cb_(x_2y_1)-=c b(x2y2)+=cb_(x_2y_2)+=c (同样可以由画图得出)
    • 构造方式和一维相同
    • 基本实现:(甚至用容器跑不起来,迫不得已用数组实现的)
    • 因为代码和字数比有限制,这个直接放图片了。 code.png