当前位置: 首页 > news >正文

树状数组的性质

树状数组与其树形态的性质

我们约定

  • l(x)=x−lowbit(x)+1l(x)=x-lowbit(x)+1l(x)=xlowbit(x)+1。即 l(x)l(x)l(x)c[x]c[x]c[x] 管辖范围的左端点。
  • 对于任意正整数 xxx,总能将 xxx 表示为 s×2k+1+2ks\times 2^{k+1}+2^ks×2k+1+2k,其中 lowbit(x)=2klowbit(x)=2^klowbit(x)=2k
  • c[x]c[x]c[x]c[y]c[y]c[y] 不交,指的是 c[x]c[x]c[x] 的管辖范围和 c[y]c[y]c[y] 的管辖范围不相交,即 [l(x),x][l(x),x][l(x),x][l(y),y][l(y),y][l(y),y] 不相交。
性质1

对于 x≤yx\le yxy,要么有 c[x]c[x]c[x]c[y]c[y]c[y] 不交,要么有 c[x]c[x]c[x] 包含于 c[y]c[y]c[y]

证明

不妨假设 c[x]c[x]c[x]c[y]c[y]c[y] 相交,即 [l(x),x][l(x),x][l(x),x][l(y),y][l(y),y][l(y),y],则一定有 l(y)≤x≤yl(y)\le x\le yl(y)xy

又因为 y=s×2k+1+2ky=s\times2^{k+1}+2^ky=s×2k+1+2k,故 l(y)=y−lowbit(y)+1=s×2k+1+1l(y)=y-lowbit(y)+1=s\times 2^{k+1}+1l(y)=ylowbit(y)+1=s×2k+1+1

又因为 x≥l(y)x\ge l(y)xl(y),所以 x=s×2k+1+bx=s\times 2^{k+1}+bx=s×2k+1+b,故 lowbit(x)=lowbit(b)lowbit(x)=lowbit(b)lowbit(x)=lowbit(b)

因为 b≥lowbit(b)b\ge lowbit(b)blowbit(b),所以 l(x)=x−low(b)+1=s×2k+1+b−lowbit(b)+1l(x)=x-low(b)+1=s\times 2^{k+1}+b-lowbit(b)+1l(x)=xlow(b)+1=s×2k+1+blowbit(b)+1

所以 l(x)=l(y)+b−lowbit(b)≥l(y)l(x)=l(y)+b-lowbit(b)\ge l(y)l(x)=l(y)+blowbit(b)l(y)

所以 l(x)l(x)l(x)l(y)l(y)l(y) 的右边,则有不等式:l(y)≤l(x)≤x≤yl(y)\le l(x)\le x\le yl(y)l(x)xy

故如果 c[x]c[x]c[x]c[y]c[y]c[y] 相交,则 c[x]c[x]c[x] 包含与 c[y]c[y]c[y]

性质2

c[x]c[x]c[x] 真包含于 c[x+lowbit(x)]c[x+lowbit(x)]c[x+lowbit(x)]

证明

不妨假设 y=x+lowbit(x)y=x+lowbit(x)y=x+lowbit(x)。设 x=s×2k+1+2kx=s\times 2^{k+1}+2^kx=s×2k+1+2k,则 lowbit(x)=2klowbit(x)=2^klowbit(x)=2k,故 y=s×2k+1+2k+1y=s\times 2^{k+1}+2^{k+1}y=s×2k+1+2k+1

sss 为奇数,则 y=(s+1)2×2k+2(t≥1)y=\frac{(s+1)}{2}\times 2^{k+2}(t\ge1)y=2(s+1)×2k+2(t1),故 lowbit(y)=2k+2lowbit(y)=2^{k+2}lowbit(y)=2k+2,若 sss 为偶数,则 lowbit(y)=2k+1lowbit(y)=2^{k+1}lowbit(y)=2k+1

sss 为奇数,此时 l(y)=y−lowbit(y)+1=(s−1)22k+2+1=(s−1)×2k+1+1l(y)=y-lowbit(y)+1=\frac{(s-1)}{2}2^{k+2}+1=(s-1)\times 2^{k+1}+1l(y)=ylowbit(y)+1=2(s1)2k+2+1=(s1)×2k+1+1

l(x)=s×2k+1+1l(x)=s\times 2^{k+1}+1l(x)=s×2k+1+1,显然有 l(y)<l(x)≤x<yl(y)<l(x)\le x<yl(y)<l(x)x<y,即 c[x]c[x]c[x] 真包含于 c[x+lowbit(x)]c[x+lowbit(x)]c[x+lowbit(x)]

sss 为偶数,此时 l(y)=y−lowbit(y)+1=(s−1)×2k+1+1l(y)=y-lowbit(y)+1=(s-1)\times 2^{k+1}+1l(y)=ylowbit(y)+1=(s1)×2k+1+1,显然有 l(y)<l(x)<x<yl(y)<l(x)<x<yl(y)<l(x)<x<y,即 c[x]c[x]c[x] 真包含于 c[x+lowbit(x)]c[x+lowbit(x)]c[x+lowbit(x)]

性质3

对于任意 x<y<x+lowbit(x)x<y<x+lowbit(x)x<y<x+lowbit(x),有 c[x]c[x]c[x]c[y]c[y]c[y] 不交。

证明

x=s×2k+1+2kx=s\times 2^{k+1}+2^{k}x=s×2k+1+2ky=s×2k+1+2k+b=(2s+1)×2k+by=s\times 2^{k+1}+2^k+b=(2s+1)\times2^{k}+by=s×2k+1+2k+b=(2s+1)×2k+b

lowbit(x)=2k,lowbit(y)=lowbit(b)lowbit(x)=2^k,lowbit(y)=lowbit(b)lowbit(x)=2k,lowbit(y)=lowbit(b)

此时 l(x)=s×2k+1+1l(x)=s\times 2^{k+1}+1l(x)=s×2k+1+1l(y)=x+b−lowbit(b)+1l(y)=x+b-lowbit(b)+1l(y)=x+blowbit(b)+1

不难发现有 l(y)>xl(y)> xl(y)>x,所以 c[x]c[x]c[x]c[y]c[y]c[y] 不交。

根据这三个性质,我们可以得到一个推论。

推论

如果 tree[i+x]tree[i+x]tree[i+x] 能够管辖到 iii,那么从 iii 开始一直加 lowbit(i)lowbit(i)lowbit(i) 必然能够到达 i+xi+xi+x

证明

首先所有的 iiilowbitlowbitlowbit 能到达的位置,都能管辖到 iii

又因为 tree[i+x]tree[i+x]tree[i+x] 能管辖到 iii,且不能被 iii 跳到,说明 tree[i+x]tree[i+x]tree[i+x] 是在 iii 的两个相邻祖先的中间。

又由性质 333,对于任意 x<y<x+lowbit(x)x<y<x+lowbit(x)x<y<x+lowbit(x),有 c[x]c[x]c[x]c[y]c[y]c[y] 不交。

说明 i+xi+xi+x 必然不与 iii 的祖先有交集,但是 i+xi+xi+xiii 的任意祖先都至少交于 iii,所以矛盾。

i+xi+xi+x 必然是 iii 的某个祖先,所以所有能管辖到 iii 的位置都是 iii 的祖先。

http://www.lryc.cn/news/610782.html

相关文章:

  • AI 对话高效输入指令攻略(四):AI+Apache ECharts:生成各种专业图表
  • C++ ---》string类的模拟实现
  • Solidity智能合约基础
  • 单目云台双摄像头配置双摄像头的优势
  • 深入理解 Android SO 导出符号:机制与安全优化
  • Spring 的优势
  • 应急响应排查思路
  • 市场与销售协同:CRM如何打破部门数据孤岛?
  • 8.5 CSS3多列布局
  • 深入解析RNN神经网络原理与应用
  • GitCode新手使用教程
  • RabbitMQ面试精讲 Day 11:RabbitMQ集群架构与节点类型
  • 人工智能之数学基础:利用全概率公式如何将复杂事件转为简单事件
  • 大模型|极简说清“数据并行”
  • AcWing 3690:求交点 ← 复旦大学考研机试题 + 克莱姆法则
  • 嵌入式开发学习———Linux环境下IO进程线程学习(四)
  • Python爬虫09_Requests用bs4进行数据解析
  • selenium自动化收集资料
  • linux服务器上word转pdf后乱码问题
  • In-memory不要全加载怎么做?
  • 基于LDA主题的网络舆情与情感分析——以云南某景区话题为例
  • 本机部署K8S集群
  • 基于k8s环境下的pulsar常用命令(上)
  • mq_open系统调用及示例
  • ubutnu20.04更新源报错:E:...签名不再生效
  • C语言学习笔记——动态内存分配
  • 备忘录记事本 任务清单 html
  • 手动开发一个TCP服务器调试工具(一):基础知识与核心类接口
  • HTML 如何转 Markdown
  • 【qt5_study】2.使用Qt Designer构造UI界面(信号与槽)