树状数组-神奇的二进制

树状数组是解决快速更新以及统计数组某段区间总和,设一个数组A[1-N],需要计算A[M-K]的总和,暴力解法需要O(K-M),如果我们求出sum(1-K)和sum(1-M),那么答案就是sum(1-M)-sum(1-K);

那么如何快速求出sum(1-N),可以考虑直接求,但如果我们再加一个条件,需要即时更新,那么使用暴力解法就会出现问题,假设更新A[K],需要对sum(1-K)到sum(1-N)进行更新,这是一个非常费时的过程。

这里我们使用一种二进制的思想,我们将十进制转为二进制进行举例思考,如上图,

C[0001] = A[0001];

C[0010] = A[0010] + A[0001];

C[0011] = A[0011];

C[0100] = A[0100] + A[0011] + A[0010] + A[0001];

C[0101] = A[0101];

C[0110] = A[0110] + A[0101];

C[0111] = A[0111];

C[1000] = A[1000] + A[0111] + A[0110] + A[0101] + A[0100] + A[0011] + A[0010] + A[0001];

 把k定义为末尾连续0个数,可以理解为C[i] = A[i] + ... + A[i-2^k+1]。

更新的过程就是更新与A[i]相关的C[j],举例说明:i = 0001,j = 0001, 0010, 0100, 1000,i = 0101, j = 0110, 1000;不难看出有不断进位的规律。

求sum得过程就是求取每一位1所对应的数字的C[i]和,举例说明:

sum[1-1111] = C[1111] + C[1110] + C[1100] + C[1000];

  C[1111] = A[1111];

  C[1110] = A[1110] + A[1101];

  C[1100] = A[1100] + A[1011] + A[1010] + A[1001];

  C[1000] = A[1000] + A[0111] + A[0110] + A[0101] + A[0100] + A[0011] + A[0010] + A[0001];

了解了树状数组所具有的二进制规律,那么下来考虑如何用代码实现。

int lowbit(x) {return x&-x;
}void update(int k,int x) {for(int i=k;i<=n;i+=lowbit(i)) {C[i]+=x; }
} 

0001 -> 0010, 即 0001 + 0001 = 0010;

0010 -> 0100, 即 0010 + 0010 = 0100;

0101 -> 0110, 即 0101 + 0001 = 0110;

0110 -> 1000, 即 0110 + 0010 = 1000;

lowbit函数就是求取所加的最小进位数,x&-x可以这样理解:-x表示补码,举例可证原码&补码等于最小进位数。

更新过程就是for循环从更新的k开始,将所有C数组中相关元素更新。

int getsum(int x)
{int ans=0;for(int i=x;i;i-=lowbit(i))//i要大于0ans+=C[i];return ans;
}

1111 -> 1110, 即 1111 - 0001 = 1110;

1110 -> 1100, 即 1110 - 0010 = 1100;

1100 -> 1000, 即 1100 - 0100 = 1000;

1000 -> 0000, 即 1000 - 1000 = 0000;

同理可以看出求和是通过减去最小进位数,得到下一个需要加的值。

转载于:https://www.cnblogs.com/ACMessi/p/8469339.html

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

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

相关文章

通往诺贝尔奖之路:盘点10个著名的科学家族

文章 | COLIN HUNTER来源 | 科研大匠科学家们常常将最亲近的合作者当做自己的亲人看待&#xff0c;而对于有些科学家而言&#xff0c;他们的合作者就是他们的家人。无论是由于遗传因素、教育因素还是二者的综合影响&#xff0c;那些开创性的物理学研究往往是一项家庭事业。从杰…

20165212 预备作业3 Linux安装及学习

20165212 预备作业3Linux安装及学习 Linux虚拟机的安装过程 我像大部分同学一样&#xff0c;通过助教学姐给的Ubuntu下载地址下载映像文件、VB&#xff0c;但是屡次出现问题&#xff0c;不停的闪出一下错误提示窗口&#xff1a;在像同学求助无果之后我使用VM、Ubuntu安装了Linu…

特斯拉公布的「新电池」,究竟要用在哪里?

来源丨ArsTechnica作者丨SCOTT K. JOHNSON编译丨科技行者在近期的“电池日&#xff08;battery day&#xff09;”活动上&#xff0c;特斯拉公司终于透露了其长期保密项目的一系列惊人消息——讨论了特斯拉为自家电池组做出的全方位升级与改进&#xff0c;并宣称有望在未来三年…

Python 程序 可以一直输入 quit_从零开始学Python - 第002课:第一个Python程序

在上一课中&#xff0c;我们已经了解了Python这门语言并安装了运行Python程序所需的环境&#xff0c;相信大家已经迫不及待的想开始自己的Python编程之旅了。首先我们来告诉大家在哪些地方可以写Python程序。编写代码的工具交互式环境我们打开Windows的“命令行提示符”工具&am…

清华张钹院士专刊文章:迈向第三代人工智能(全文收录)

来源&#xff1a;清华大学人工智能研究院作者&#xff1a;张钹、朱军、苏航在这篇评述文章中&#xff0c;清华大学人工智能研究院院长、中国科学院院士张钹教授阐述了自己对于「第三代人工智能」的看法。他认为&#xff0c;第三代 AI 发展的思路是把第一代的知识驱动和第二代的…

java 垂直走马灯多行,Android实现图文垂直跑马灯效果

最近在维护老项目&#xff0c;老项目有一个地方需要修改&#xff0c;就是垂直跑马灯的问题&#xff0c;之前的垂直跑马灯是只有文字跑马灯&#xff0c;新版需要加上。之前是用的MarqueeView&#xff0c;看了下源代码是只支持文字的&#xff0c;于是我就改了下原作者的源代码。M…

惠普打印机怎么无线连接电脑_惠普打印机连不上无线?怎么解!

打印机有无线功能&#xff0c;但却总连不上路由&#xff0c;看着高大上的功能用不上&#xff0c;是不是很捉急&#xff1f;今天总结了5种打印机连接无线的方法&#xff0c;总有一款适合你~- 方 1 法 -在打印机屏幕上配置无线本方法适用于带有无线网络功能且有可视面板屏幕的打印…

mac 用户 文件夹 权限_Mac视频播放软件推荐

Mac上好用的视频播放器KPlayer mac是一款Mac上非常好用的视频播放器&#xff0c;这款播放器可以帮助用户观看各种高清的电影。这款KPlayer mac能够以标准和高清晰度打开和播放各类视频。通过设置H.264硬件加速&#xff0c;达到控制720p&#xff0c;1080p视频文件的渲染和播放的…

麦肯锡季刊 | 人工智能的发展与障碍

来源&#xff1a;麦肯锡作者&#xff1a;Michael Chui&#xff0c;Sankalp Malhotra受访者表示&#xff0c;人工智能正在迅速普及&#xff0c;但预计不会大规模减少企业用工人数。目前&#xff0c;仅有极少数企业具备让人工智能创造规模化价值的基本要素。麦肯锡一项以人工智能…

微星主板黑苹果_在老机器上LGA775平台安装黑苹果MacOS系统 – 玄烨品果

这篇算不得上是教程&#xff0c;顶多是玄烨个人心得而已。因为在装黑苹果这个技术上&#xff0c;玄烨并不是高手&#xff0c;最多是个入门的菜鸟。DSDT注入、驱动修改&#xff0c;通通都不会。能不显卡驱动好&#xff0c;网卡工作正常、声音搞定就满意了。开始分享安装过程。相…

毕马威发布《人工智能无处不在》研究报告:人工智能在五大行业的成就与挑战...

来源&#xff1a;AIII研究院毕马威近期发布了研究报告《人工智能无处不在》。该报告对751名在人工智能各行业应用领域具有一定了解的企业决策者进行调研并发布了“成绩单”&#xff0c;总结分析了人工智能在医疗保健、金融服务、交通运输、科技、零售业五大不同行业的应用表现与…

1660用哪个驱动稳定_PDF转word怎么转?哪个PDF转换器最好用?-PDF ——快科技(驱动之家旗下媒体)-...

PDF转word怎么转&#xff1f;平时在生活中&#xff0c;很多朋友都会使用到将PDF转换成Word文档&#xff0c;因为一般情况下PDF文件是不能直接编辑修改的。那么用什么方法才能将PDF文档转换成Word呢&#xff01;其实学会下面这2个方法就可以将它完整地实现转换效果。方法一&…

OpenAI推出数学推理证明模型,推理结果首次被数学家接受

大数据文摘出品作者&#xff1a;牛婉杨今年6月&#xff0c;OpenAI发布一款强大的文本生成模型GPT-3&#xff0c;不少网友迅速上手用了起来&#xff0c;有人用它写食谱、写歌词&#xff0c;甚至有人用它写博客&#xff0c;愣是以假乱真登上了新闻平台技术板块热榜第一。前不久&a…

卡苹果6plus在线_@哈尔滨家长:学生卡初次申办,需要到线下网点办理!

去办理业务&#xff0c;就怕人多排队&#xff01;9月份开学后&#xff0c;不少孩子上下学要赶公交&#xff0c;对没有手机的孩子来说&#xff0c;公交IC卡成了出门必备“神器”。对家长来说&#xff0c;充值、缴费成了难题&#xff0c;缴多了怕卡丢&#xff0c;少了还要总去&am…

dm_php库,dmandwp系统 PHP建站系统+wordpress建站和DM系统区块+安装教程

dmandwp 系统(又名 wordpress 建站和 DM 系统区块)是一款使用 DM 系统的区块功能&#xff0c;让 wordpress 建站更方便的 PHP 建站系统。DM 系统的优势就是区块功能。现在把 DM 的区块功能做为插件&#xff0c;用在 wordpress 系统上。分类和内容&#xff0c;菜单&#xff0c;路…

美国对六种新兴技术实施控制:EUV和5nm相关技术在列

来源&#xff1a;翻译自Global trade and sanctions law。2020年10月5日&#xff0c;美国商务部工业与安全局&#xff08;BIS&#xff09;发布了最终规则&#xff0c;对《关于常规武器和两用货物及技术出口管制的瓦森纳安排》2019年12月全体会议上达成的六项“新兴技术”实施新…

spoon无法初始化至少一个步骤_手机怎么设置无线路由器 手机设置无线路由器步骤【详解】...

随着智能手机、平板电脑等无线设备的流行&#xff0c;无线网络也已经逐渐普及。而无线路由器作为无线网络的载体&#xff0c;自然成为必不可少的设备。小编原以为无线路由器只能通过连接电脑才能进行设置&#xff0c;但事实上如今很多路由器都可以通过手机完成设置&#xff0c;…

任正非最新讲话:华为专家队伍怎么建?

版权声明来源&#xff1a;心声社区&#xff0c;书享界作者&#xff1a;任正非书享界导语10月10日&#xff0c;任正非签发华为总裁办电子邮件&#xff0c;向华为全员公布今年7月15日、20日、21日任正非在专委会建设思路汇报、研发专家代表及专委会代表座谈会上的讲话。在这篇讲话…

Fast Paxos

自从Lamport在1998年发表Paxos算法后&#xff0c;对Paxos的各种改进工作就从未停止&#xff0c;其中动作最大的莫过于2005年发表的Fast Paxos。无论何种改进&#xff0c;其重点依然是在消息延迟与性能、吞吐量之间作出各种权衡。为了容易地从概念上区分二者&#xff0c;称前者C…

axios 注册拦截器 cdn引用_PicGo+jsDelivr+GitHub搭建免费cdn加速的图床

PicGojsDelivrGitHub搭建免费cdn加速图床。下面是我写的教程。https://www.sakura521.cn/2020/03/13/picgocdn.html​www.sakura521.cn前言开始使用GitHub&#xff0b;jsDelivr搭建的cdn加速的免费图床&#xff0c;但是发现每次上传图片&#xff0c;然后创建新的版本太麻烦了。…