首页 > 其他分享 >树状数组

树状数组

时间:2023-07-26 15:46:34浏览次数:53  
标签:树状 int res pos 差分 add 数组 lowbit

【模板】

单点修改。时间复杂度 O(logn)

void add(int pos, int w)
{
    while (pos <= n)
    {
        tree[pos] += w;
        pos += lowbit(pos);
    }
}

 

区间查询。时间复杂度 O(logn)

返回的是从1到pos的值的和。

int query(int pos)
{
    int res(0);
    while (pos > 0)
    {
        res += tree[pos];
        pos -= lowbit(pos);
    }
    return res;
}

lowbit。表示x的二进制表达式中最低位的1所对应的值。

int lowbit(int x) { return x & -x; }

 

关于区间修改。其实就是用将以差分的形式构建树状数组,例如将 [x, y] += w时,设d[ ]为差分数组,那么就

            add(x, k);
            add(y + 1, -k);

同理差分下的单点查询就是query(x)。这是因为将1~x的差分全部加起来,就是x这个数本身。

标签:树状,int,res,pos,差分,add,数组,lowbit
From: https://www.cnblogs.com/bszzz/p/17582632.html

相关文章

  • LeetCode 560. 和为 K 的子数组
    classSolution{public:intsubarraySum(vector<int>&nums,intk){intn=nums.size(),res=0;vector<int>s(n+1,0);unordered_map<int,int>hash;//记录端点i之前所有前缀和的出现情况for(inti=1;i<=n;i++)......
  • PHP 数组
    数组能够在单独的变量名中存储一个或多个值。实例数组在单个变量中存储多个值:<?php$cars=array("porsche","BMW","Volvo");echo"Ilike".$cars[0].",".$cars[1]."and".$cars[2].".";?>什么是数组?数组是特殊的变量,它......
  • python 固定长度数组
    python固定长度数组在Python中,数组是一种常见的数据结构,用于存储相同类型的元素。通常,我们可以使用列表(List)来表示数组。然而,Python中的列表是可变长度的,这意味着我们可以随时向列表中添加或删除元素。但在某些情况下,我们需要固定长度的数组,即不能增加或删除元素。本文将介绍如何......
  • 【学习笔记】树状数组
    树状数组是一种数据结构,普通树状数组维护的信息及运算要满足结合律且可差分。单点加、区间求和树状数组是用长度为\(n\)的数组存储的。我们假设这个数组为\(n\),令lowbit(i)=i&(-i),则\(c_i\)保存的是向前lowbit(i)长度的\(a\)数组区间和。单点加:从\(i\)开始,修改所......
  • python定义三维数组
    Python定义三维数组在Python中,我们可以使用列表(List)来定义和操作多维数组,包括三维数组。三维数组是指包含多个二维数组的数据结构,它可以用于存储和处理更复杂的数据。什么是三维数组?在计算机科学中,数组是一种数据结构,它由一系列相同类型的元素组成。一维数组是一列元素,二维数组......
  • python定义函数入参为数组
    Python定义函数入参为数组在Python中,我们可以定义函数来接收数组作为参数。数组是一种数据结构,它可以容纳多个值,并通过索引访问这些值。传递数组作为函数参数可以方便地处理大量数据,并提高代码的可重用性。定义函数接收数组参数在Python中,我们可以通过在函数定义时指定参数的类......
  • python字符串转数组
    Python字符串转数组的实现引言在Python中,字符串是由字符组成的,而数组则是由元素组成的数据结构。有时候我们需要将一个字符串转换成一个数组,以便于对其中的元素进行操作。本文将教授如何实现Python字符串转数组的方法。实现步骤下面是将字符串转换为数组的步骤,我们可以用表格的......
  • 数组元素和与数字和的绝对差
    给你一个正整数数组nums。元素和是nums中的所有元素相加求和。数字和是 nums中每一个元素的每一数位(重复数位需多次求和)相加求和。返回元素和与数字和的绝对差。注意:两个整数x和y的绝对差定义为|x-y|。示例1:输入:nums=[1,15,6,3]输出:9解释:nums的......
  • 树状数组
    树状数组定义设树状数组为C,x的末尾有k个0,则C[x]表示A数组中A[X-2^k+1,x]的和使用lowbit(x)=x&(-x)可以得到2^k的值应用维护单点修改前缀和的数据结构一个树形结构模型,支持单点修改,查询一个点x的前缀和通俗来讲可以动态维护一个序......
  • element ui 的el-select的回显,v-model绑定的是一个数组,如何保证回显成功
    要确保`el-select`组件的回显成功,其中`v-model`绑定的是一个数组,你需要按照以下步骤进行操作:1.在`el-option`组件上使用`:value`属性设置每个选项的值,确保每个选项都有唯一的标识。2.在`el-select`组件上使用`:multiple="true"`属性来启用多选模式。3.在`mount......