Super Fenwick 学习笔记

她是谁(What)?

超级树状数组(Super Fenwick 或 Super BIT)是一种维护线性数据,支持区间修改,区间查询的数据结构,其中要求运算符满足结合律,可逆性。(例如异或,加法,乘法或非奇异的矩阵乘法)

正如其名字,超级树状数组的本质是树状数组,因此,她也继承了树状数组的所有优点:

  • 码量小
  • 常数小
  • 空间小

尽管她能做的线段树都能做,但上面三个条件是即使 zkw 线段树也无法比拟的。

她的是怎么实现的(How)?

为了方便,我们记维护的线性数据为 \(a\),其下标从 \(1\)\(n\)

同时记将下标在 \([l,r]\) 内的数加上 \(v\) 的操作称作 \(update(l, r, v)\)

询问下标在 \([l,r]\) 内的数的和的操作为 \(query(l, r)\)

首先由于操作的可逆性,我们知道:

\[query(l, r) = query(1, r) - query(1, l - 1) \]

由于要进行区间修改操作,所以只能对 \(a\) 进行差分,得到差分数组 \(d_i=a_i-a_{i-1}\)

于是我们知道:

\[query(1, x)=\sum_{i=1}^x \sum_{j = 1}^i d_j \]

交换求和符号得到:

\[query(1, x)=\sum_{j=1}^{x} \sum_{i=j}^{x} d_j=\sum_{j=1}^{x} d_j \sum_{i=j}^{x} 1=\sum_{j=1}^x(x-j+1)d_j=(x+1)\sum_{j = 1}^xd_j-\sum_{j=1}^xjd_j \]

我们惊奇地发现她可以使用两个树状数组进行维护,一个维护 \(d_i\),另一个维护 \(id_i\)。于是我们便可以在 \(\Theta(\log n)\) 的时间复杂度内完成一次查询。

再来看修改,我们只需要更改在对应位置的两个树状数组即可。

她的代码(Code)?

long long d1[MAXN];
long long d2[MAXN];
int lowbit(int x) {return x&-x;
}
void add(long long *arr, int pos, long long x){while (pos <= n)arr[pos] += x,pos += lowbit(pos);
}
void update(int l, int r, long long x){add(d1, l, x);add(d1, r + 1, -x);add(d2, l, x * (l - 1));add(d2, r + 1, -x * r);
}
long long getsum(long long *arr, int pos){long long sum = 0;while (pos)sum += arr[pos],pos -= lowbit(pos);return sum;
}
long long query(int x,int y){return y * getsum(d1, y) - (x - 1) * getsum(d1, x - 1) - (getsum(d2, y) - getsum(d2, x - 1));
}

她的例题(Practice)?

基础:洛谷-P3372

进阶:CodeForces860E Tips:需要搭配重链剖分食用,由于不是正解,有略微卡常。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/868284.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Weblogic T3协议】反序列化漏洞分析(上)

免责声明 此文章中所涉及的技术、思路和工具仅供网络安全学习为目的,不得以盈利为目的或非法利用,否则后果自行承担!一、前言 在初入安全的时候,就听说过weblogic的大名,当然听说的并不是weblogic如何如何好用,而是因为其漏洞出现频率实在是有点高...于是乎,便抱着学习的…

关于安卓edge无法播放Wordpress上传的mp4视频问题

使用默认插件上传后,电脑端可以播放视频,其他手机浏览器均可播放视频,但是安卓edge无法加载视频。 大概是如下图样子:经查发现电脑打开页面会显示站点部分不安全的提示,说明edge端做了一些阻挡处理,导致视频无法播放。找了一些资料后,发现可以自行修改加载视频的代码框架…

【bt下载软件qBittorrent-增强版】下载链接

原作者github项目地址:https://github.com/c0re100/qBittorrent-Enhanced-Edition 找到当前的最新版本根据自身需要选择下载版本,这里选的是windows版本

鸟哥的Linux私房菜 基础学习篇 第四版PDF、EPUB免费下载

Linux入门书升级版,适用Linux系统应用和开发及运维的人员,涵盖linux内核,命令行,嵌入式,基于CentOS,7.x适读人群 :Linux初学者 适合Linux管理员作为参考手册 Linux入门书升级版,适用Linux系统应用和开发及运维的人员,涵盖linux内核,命令行,嵌入式,基于CentOS,7.x电…

领域驱动设计:软件核心复杂性应对之道(修订版)PDF、EPUB免费下载

本书是领域驱动设计方面的经典之作,修订版更是对之前出版的中文版进行了全面的修订和完善。全书围绕着设计和开发实践,结合若干真实的项目案例,向读者阐述如何在真实的软件开发中应用领域驱动设计。书中给出了领域驱动设计的系统化方法,并将人们普遍接受的一些实践综合到一…

JAVA之集合

1、集合集合可以存储引用数据类型; 集合不可以存储基本数据类型,若要存储,需封装成包装类;2、集合和数组的对比长度【数组长度固定,集合长度可变】 存储类型【数组可以存基本数据类型和引用数据类型,集合可以存引用数据类型,若存储基本数据类型,需封装成包装类】3、Arr…

[题目记录]P9999 [Ynoi2000] tmostnrq

当前自己写过了码量第二大的题目 , 不管怎么说对拍非常重要 .P9999 [Ynoi2000] tmostnrq 题意 给定 \(n\) 个顶点的树,顶点编号为 \(1,\dots,n\),给定长度 \(n_0\) 的序列 \(a_1,\dots,a_{n_0}\),共 \(m\) 次查询,每次查询给定 \(l,r,x\),问树的顶点 \(x\),依次向 \(a_l,…

多光谱火焰智能监测摄像机

多光谱火焰智能监测摄像机将在未来继续发展。未来的摄像机可能会更加智能化,具备更强的自主识别和决策能力,进一步提升火灾监测的灵敏度和准确性。此外,随着物联网的发展,这些摄像机还有望与其他设备和系统实现更深入的数据共享和集成应用,为整个安全监控体系增添新的可能…

明火智能监测摄像机

明火智能监测摄像机检测到火源时,它会立即触发报警机制,以警告人员采取适当的行动。它可以与各种报警系统集成,发出清晰可闻的警报声,并通过网络将警报信息发送到相关部门或人员的手机应用程序,确保快速响应。明火智能监测摄像机全天候工作,不间断地监测环境中的火情。它…

山体滑坡自动监测识别摄像机

山体滑坡自动监测识别摄像机系统通过技术创新和智能化应用,为减少自然灾害带来的损失和风险提供了重要的技术手段和支持。随着技术的进步和系统的完善,相信这类系统将在全球范围内得到广泛应用,为社会公共安全和环境保护作出更大贡献。对于现代社会而言,山体滑坡作为自然灾…

水位智能监测识别摄像机

水位智能监测识别摄像机的应用前景十分广阔。未来,这些摄像机有望进一步提升监测精度和反应速度,扩展到更多复杂的水域环境和特殊应用场景中,为保障社会公共安全和生态环境做出更大贡献。总之,水位智能监测识别摄像机以其先进的技术和多功能性能,正在成为水域监测领域的重…

1.12 CW 模拟赛 T1. 括号序列

思路 根据赛时的检验, 典型的动点问题的 \(\rm{trick}\) 并不能在这里使用, 也就是说, 分类讨论前缀 + \(i\) + 后缀 前缀 + \(i\) 后缀 + \(i\)是不可行的 考虑括号串问题的常见做法, 先将其赋值成 \(1, -1\) 之后进行处理 你发现这种做法有枚举字段和的瓶颈, 所以也不可行 当…