\(updata : 2022.2.1\)
学习原文
没错 , 树状数组也能维护区间最值.(单点修改 , 区间查询)
不过这种写法要对树状数组维护的区间要有一定的理解.
主要是理解 tree[x]
维护的区间 [x - lowbit(x) , x]
的最值
单点修改
//将 a[x] 修改为 y.
void updata(int x,int y){
tree[x] = a[x] = y ; // 这里我的思考与原作有冲突.
while( x<= n){
//tree[x] = y ; 原作在这里加上了更新.
int low = lowbit(x);
for(i=1;i<low;i>>=1) //这里为什么是i>>=1? , 去观察树状数组维护的区间[x-lowbit(x),x] , 都是跟 x 差 2 的次方倍 ; 注意 < 的细节 , 举例 8 (i = 1 , 2, 4 ) , 若 <= 则有 i = 8 , tree[0] 的加入.
tree[x] = max(tree[x] , tree[x - i]); // 注意是tree数组 , 有是定义域上的一点代表 a 数组的一个区间 , 参考 8 的例子.
}
}
标签:树状,int,数组,区间,维护,最值 来源: https://www.cnblogs.com/xqy2003/p/15859176.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。