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

树状数组

时间:2023-08-08 10:57:12浏览次数:55  
标签:return 树状 int sum add 数组

大佬的讲解
视频讲解
两者搭配食用效果更佳
树状数组就是一个树状数组的板子题

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

求最低位1代表的值是多少

void add(int x,int y){
    while(x<=n){
        c[x]+=y;
        x+=lowbit(x);
    }
}

将包含这个数的每一个值都更新

int sum(int x){
    int sum=0;
    while(x>0){
        sum+=c[x];
        x-= lowbit(x);
    }
    return sum;
}

求前缀和

int32_t main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        int x;
        cin>>x;
        add(i,x);
    }
    for(int i=1;i<=m;i++){
        int p,x,k;
        cin>>p>>x>>k;
        if(p==1){
            add(x,k);
        }
        else{
            cout<<sum(k)-sum(x-1)<<endl;
        }
    }
    return 0;
}

标签:return,树状,int,sum,add,数组
From: https://www.cnblogs.com/zyzzzz/p/17613579.html

相关文章

  • 笔记 | 类数组与数组扁平化
    一、类数组Array-like在日常中能接触到的类数组有这么几个:参数对象arguments;通过querySelector获取的NodeList;NodeList对象是节点集合,NodeList可以使用for...of来迭代,在一些情况下,NodeList是一个实时合集;通过函数:getElementsByTagNamegetElementsByClass......
  • JS实现根据数组对象的某一属性排序
    一、冒泡排序(先了解冒泡排序机制)以从小到大排序为例,冒泡排序的原理就是通过两层循环把数组中两两相邻的元素进行比较,是的大的元素放到后边,元素交换位置,从而一步步的交换元素的位置,使得最大的元素放到数组的末尾,这样内部的循环就进行了一轮,再根据外部的循环依次再把次大一点的元素......
  • 对集合数组进行降序排列的方法
    在Dart中,你可以使用List的sort()方法对集合数组进行排序。要按降序排列,可以在排序方法中指定一个自定义的比较函数。以下是一种常见的降序排序方法:List<int>numbers=[3,1,4,2,5];numbers.sort((a,b)=>b.compareTo(a));print(numbers);//[5,4,3,2,1]在上述示例中,......
  • php 无限级分类,超级简单的无限级分类,支持输出树状图
    返回一维数组//无限级分类 function GetTree($arr, $pid = 0, $step = 0){    static $tree;    foreach ($arr as $key => $val) {        if ($val['pid'] == $pid) {            $name = isset($val['title']) ? $......
  • php多维数组自定义排序 uasort()
    对数组进行排序PHP有一些用来排序数组的函数,这个文档会把它们列出来。主要区别有:有些函数基于array的键来排序,而其他的基于值来排序的:$array['key']='value';。排序之后键和值之间的关联关系是否能够保持,是指排序之后数组的键可能会被重置为数字型的(0,1,2...)。排......
  • php中计算二维数组中某一元素之和
    [0] => array(5){    ["id"] => string(2) "11"    ["name"] => string(5) "1.jpg"    ["suffix"] => string(3) "jpg"    ["url"] => string(29) "./Uploads/1/5292f55d208e......
  • 二维数组排序,按其中某项排序
    /** * 二维数组排序 * @param $arrays         目标数组 * @param $sort_key       要排序的键 * @param int $sort_order 升序|降序 * @param int $sort_type  数字|字符串|通常 * @return $arrays         */function ......
  • 将一个数值切成N份 返加一个数组
    /** * 将一个数值切成N份 * @param  int $number 切的数值 * @param  int $avgNumber 份数 * @return array */function numberAvg($number, $avgNumber){    if ($number == 0) {        $array = array_fill(0, $avgNumber, 0......
  • 检测数组深度,数据深度,几维数组
    /** * 检测数据的深度 * @param $array 要检测的数组 * @return int   返回深度值 */function array_depth($array){    $max_depth = 1;    foreach ($array as $value) {        if (is_array($value)) {          ......
  • 【狂神说Java】Java零基础学习笔记-Java数组
    【狂神说Java】Java零基础学习笔记-Java数组Java数组01:数组的定义数组是相同类型数据的有序集合.数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们.Java数组02:数组声明创建......