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

树状数组

时间:2024-03-15 21:00:43浏览次数:12  
标签:树状 int res ans while add 数组 lowbit

模板题:https://www.luogu.com.cn/problem/P3374
题解:

#include <bits/stdc++.h>

using namespace std;

const int N = 5e5 + 5;

int m, n;
int c[N];

int lowbit(int x) {
	return x & -x;
}
int query(int x) {
	int res = 0;
	while(x) {
		res += c[x];
		x = x - lowbit(x);
	}
	return res;
}
void add_x(int x, int val) {
	while(x < N) {
		c[x] += val;
		x = x + lowbit(x);
	}
}

int main() {
    cin >> m >> n;
    for(int i = 1; i <= m; i ++) {
        int ans;
        cin >> ans;
        add_x(i, ans);
    }
    int a, x, y;
    while(n --) {
        cin >> a >> x >> y;
        if(a == 1) {
            add_x(x, y);
        }
        else if(a == 2) {
            cout << query(y) - query(x - 1) << endl;
        }
    }
    return 0;
}

标签:树状,int,res,ans,while,add,数组,lowbit
From: https://www.cnblogs.com/yishujia/p/18076233

相关文章

  • 4.数组
    一、为什么需要数组由于变量只能存放一个值,当要一回存放多个值时会很麻烦,所以C++的创造者增加了数组这个概念,能够同时存放多个值。二、一维数组一维数组的定义//数组定义//格式:数据类型数组名[数组长度]={元素1,元素2,元素3};inta1[5];floata2[15];doublea3[100];......
  • 数组扩容golang
    packagemainimport( "fmt" "unsafe")funcmain(){ which:=make([]byte,0) which=append(which,[]byte("123")...) which1:=which fmt.Printf("which:%s varpointer:%p arrpointer%p cap:%d len:%d, w......
  • 第一课——树状数组
    前缀和算法可以计算某一个区间的累记和,但是出现修改的时候,前缀和的效率便得不到保障。于是数状数组出现了。出现原因总结——需求从单纯的区间查询变为了单点修改+区间查询。树状数组本文不探讨树状数组的开发过程,这里先给出树状数组的结构:树状数组的设计非常巧妙,它让下标为......
  • Java题目-数组计算-中位数- 圆类的构造-时间计算-学生类设计
    第一题:数组计算题目描述:编写Java程序,计算两个整型数组的和、差、乘积、商的整数部分及大小关系。定义如下:和:两个数组对应元素的和,若元素缺失,则补0;差:第一个数组和第二个数组对应元素的差,若元素缺失,则补0;乘积:两个数组对应元素的积,若元素缺失,则计0;除:第一个数组元素除以第二......
  • 查分数组
    //差分数组工具类classDifference{//差分数组privateint[]diff;/*输入一个初始数组,区间操作将在这个数组上进行*/publicDifference(int[]nums){assertnums.length>0;diff=newint[nums.length];//根据初始......
  • MATLAB学习笔记1.数组运算
    先来介绍两个常用的,在命令行里边输入“clc”,就会清空以上的命令行(也就是这个直接与你对话的地方)的所有内容;但是并不会把已经设置的变量清空,要想清空变量,则需要在命令行中输入“clear”,这样就可以把右侧已经设置的变量都清空掉了。下面是示例输入回车再输入“clear”并输入......
  • 108. 将有序数组转换为二叉搜索树c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/structTreeNode*build(int*nums,inthead,inttail){if(head>tail)returnNULL;intmid=head+(......
  • golang 随机数组的性能对比测试
    最近需要用到随机数,但在随机数的生成方面遇到些问题,如加了seed后反而生成的数组是固定的,没有加是随机的,后面查资料了解到,如果seed值是一样的,序列中的值就固定的,而不加seed时,每次的都是随机的,后面想到如果用来做负载均衡呢,性能又如何。下面是源码:packagebenchimport( ......
  • 26. 删除有序数组中的重复项
    给你一个非严格递增排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。然后返回nums中唯一元素的个数。classSolution{publicintremoveDuplicates(int[]nums){if(nums==n......
  • 稀疏数组与二维数组之间的转换
    稀疏数组介绍:稀疏数组:当一个数组中大部分元素为同一个值时,就可以考虑使用稀疏数组来保存数据节省空间。稀疏数组的原理:1)稀疏数组一共三列,第一行的第一列保存原二维数组的行数,第一行第二列保存原二维数组的列数,第一行第三列保存原二维数组非0数据的个数;2)稀疏数组一共有【原二维......