首页 > 其他分享 >卡常科技:树状数组做线段树 1

卡常科技:树状数组做线段树 1

时间:2023-02-11 13:45:39浏览次数:42  
标签:rd limits 树状 线段 ii 数组 卡常 sum

树状数组能维护的东西:单点修改,查前缀和。

树状数组 1 直接朴素前缀和,树状数组 2 就差分一下。

对于线段树 1 的操作,不好用一个树状数组维护。

首先得把区间加给变成单点加。将数组差分为 \(d\) 即可。

首先用一个树状数组维护 \(s_0(x)=\sum\limits_{i=1}^xd_i\)。

\[\begin{aligned} &\sum\limits_{i=l}^r\sum\limits_{j=1}^id_i\\ =&(r-l+1)\sum\limits_{i=1}^{l-1}d_i+\sum\limits_{i=l}^r(r-i+1)d_i\\ =&(r-l+1)s_0(l-1)+(r+1)\sum\limits_{i=l}^rd_i-\sum\limits_{i=l}^rd_ii\\ =&(r-l+1)s_0(l-1)+(r+1)(s_0(r)-s_0(l-1))-\sum\limits_{i=l}^rd_ii\\ =&(r+1)s_0(r)-ls_0(l-1)-\sum\limits_{i=l}^rd_ii \end{aligned} \]

那么现在可以再用一个树状数组维护 \(s_1(x)=\sum\limits_{i=1}^xd_ii\)。

那么区间和就 \(=(r+1)s_0(r)-ls_0(l-1)-s_1(r)+s_1(l-1)\)。

如何更新:

将 \([l,r]\) 加 \(v\) 的时候,即将 \(d_l\) 加 \(v\),\(d_{r+1}\) 减 \(v\)。

那么可以将第一个树状数组 \(l\) 位置 \(+v\),第二个 \(l\) 位置 \(+lv\);第一个树状数组 \(r+1\) 位置 \(-v\),第二个 \(r+1\) 位置 \(-(r+1)v\)。

其实本质是树状数组维护 \(k\) 阶前缀和。

开 \(k\) 个树状数组可以做到 \(O(k\log n)\) 维护单点修改和查询 \(k\) 阶前缀和。

标签:rd,limits,树状,线段,ii,数组,卡常,sum
From: https://www.cnblogs.com/0x3b800001/p/Fenwick-tree.html

相关文章

  • 线段树
    线段树(SegmentTree)线段树是主要用于维护区间信息(要求满足结合律)的数据结构。与树状数组相比,线段树可以在\(O(\logN)\)的时间复杂度内实现单点修改、区间修改、区间查询......
  • 线段树查询i到j最长增加子串和序列
    基础篇最长增加子数组-楠030416-博客园(cnblogs.com)增加线段树子串#include<bits/stdc++.h>usingnamespacestd;//最长连续增加子串inta[100],dp[100],tr......
  • 线段树模板(cpp)
    这个线段树模板修改起来较为简单轻松,结构也比较简单明了//线段树的信息constintN=2e5+10,mod=1e9+7;inta[N];structinfo//存储线段树的值{ intsize;......
  • 【YBT2023寒假Day8 C】图论题(图论)(并查集)(线段树合并)
    图论题题目链接:YBT2023寒假Day8C题目大意给你一个无向图,然后你会一直操作直到无法操作,每次找出一个满足条件的三元组(a,b,c),满足a<b<c,a,b与a,c之间有边,b,c之间没......
  • 【codevs1081】线段树练习2
    problemsolutioncodes#include<iostream>usingnamespacestd;constintmaxn=100010;#definelchp<<1#definerchp<<1|1structnode{intval,addmark;}sgt[maxn<<......
  • 【codevs1080】线段树练习
    problemsolutioncodes#include<iostream>usingnamespacestd;constintmaxn=100010;#definelchp<<1#definerchp<<1|1structnode{intval,addmark;}sgt[maxn<<......
  • 【YBT2023寒假Day7 C】查区间(线段树套线段树)
    查区间题目链接:YBT2023寒假Day7C题目大意给你一个序列,要你维护两种操作,区间取min和区间求第k小。思路关于区间求第k小,有一个方法,是树套树。外层线段树维护位......
  • 【YBT2023寒假Day7 A】出题人(线段树优化DP)
    出题人题目链接:YBT2023寒假Day7A题目大意有一个序列,你要把它分成若干份,每一份的值的和不超过m,而且每一段最大值的和最小。输出每段最大值和的最小值。思路考虑每次......
  • 【YBT2023寒假Day6 C】子串染色(SAM)(线段树)(启发式合并)
    子串染色题目链接:YBT2023寒假Day6C题目大意对于一个s的子串t,把它在s中所有出现的位置包含的所有下标染黑,黑色连续段的数目是子串t的价值。然后给你一个k和一......
  • 【YBT2023寒假Day6 A】寄蒜挤河(计算几何)(线段树)
    寄蒜挤河题目链接:YBT2023寒假Day6A题目大意有一些二维平面上的点,按顺序加入,每次加入一个点后,问你图上有多少个三元点对使得它们构成的三角形严格包含原点,就是原点不能......