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

树状数组

时间:2024-02-19 14:46:42浏览次数:22  
标签:单点 前缀 树状 查询 数组 区间

树状数组

  • 区间查询,单点修改(主要求前缀和吧,改一改可以计数)
  • 单点查询,区间修改(维护差分数组)
  • 区间查询,区间修改(比较麻烦,两个树状数组维护)

区间查询(基础)

(看图)类似前缀和,(当成前缀和用),但是为了减少单点修改复杂度写成树状的,每点更新时向上找“根”。
查询时找 \(lowbit\) (二进制中最右边的 \(1\) 和 右边的 \(0\) 组成的数),见

二进制

void add(int x,int y)
{
	for(;x<=n;x+= (x&-x)) c[x]+=y;
}
int ask(int x)
{
	int ans=0;
	for(;x;x-=(x&-x)) ans+=c[x];
	return ans;
}
int main()
{
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		add(i,a[i]);
	}
	int x,y;
	scanf("%d%d",&x,&y);
	if()
		add(x,y);
	else
		printf("%d\n",ask(y)-ask(x-1));
	return 0;
}

标签:单点,前缀,树状,查询,数组,区间
From: https://www.cnblogs.com/ppllxx/p/18020983

相关文章

  • 循环可变化的集合 数组 datatable 等 || c# winfrom DataGridView 动态UI下载功能
    Gif演示   分解步骤1,使用组件DataGridView2,使用DataSource来控制表格展示的数据来源(注意:来源需要是DataTable类型)3,需要用到异步线程。如果是不控制数据源的话,需要使用UI安全线程;(使用Control.Invoke或Control.BeginInvoke方法)4,DataGridView的列如果设置图片,尽量代码......
  • 稀疏数组
    稀疏数组的一些常见问题1.什么是稀疏数组?1.1what?稀疏数组是一种针对大部分元素值为相同或者默认值的数组进行优化存储的方法。在稀疏数组中,只存储那些不同于默认值的元素及其对应的位置信息,从而节省存储空间。1.2why?稀疏数组通常用于处理大规模数组中大部分元素值相......
  • 树状数组及线段树详解
    本文章是作者调了3个多小时后,感触颇深,历经1个多小时写出来的,不喜勿喷相关内容可参考模板总结中的树状数组及线段树;进入正题树状数组所谓树状数组,即像树的数组,一般应用于求多次前缀和以及区间前缀和的问题中;其根据节点编号的二进制数的末尾0的个数划分层次,每个节点的管辖......
  • HH项链(树状数组)
    HH项链题目描述HH有一串由各种漂亮的贝壳组成的项链。HH相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义。HH不断地收集新的贝壳,因此他的项链变得越来越长。有一天,他突然提出了一个问题:某一段贝壳中,包含了多少种不同的贝壳?这个问题很难......
  • 数组 容器 递归 普通排序 线性排序
    《数据结构与算法之美》读书笔记写在前面这本书的大部分内容比较浅显,因此只挑DSAA课程上没有涉及或没有深入讨论的点总结第二章数组相关提高传统数组插入/删除数据效率的方法:如果插入的数据不要求有序,可以直接把某位的原数据替换成新数据,然后把原数据放到数组末尾,避免大......
  • 树状数组
    树状数组是一种支持\(O(\logn)\)时间内进行单点修改和区间查询的,代码量小的数据结构。原理及实现下为洛谷P3374【模板】树状数组1题意简述:已知一个长度为\(n\)的数列\(a\),你需要进行下面两种操作:将某一个数加上\(x\);求出某区间每一个数的和。保证\(......
  • 情书密码 (树状数组)
    题目问题描述有消息称:绝恋找到了自己的MissRight,正准备自己的表白。绝恋已经写好了情书,但为了避免其它人截获,他对情书进行加密。为了打探绝恋的私密,你冒着生命危险终于搞到了这封情书。原以为可以轻易将情书解密,结果竟然发现聪明的绝恋并没有直接写出加密用的密码,而是在那粉红......
  • 学习笔记#4:树状数组和 LIS
    学习笔记#4:树状数组和LIS前言:树状数组是和线段树类似的数据结构,更确切的说,树状数组能解决的问题,线段树都能解决,而线段树还能解决一些树状数组所不能解决的问题。因此线段树的应用范围比树状数组更广泛。但是,树状数组的常数更小,在同样的\(\text{O}(n\logn)\)复杂度下,树状数......
  • 用好内存从数组开始
    数组就是将相同数据的多个数据连续排列在内存中的一个元素序列。数组是使用内存的基础,数组之所以是使用内存的基础,是因为它反映的就是内存的物理结构本身,使用数组可以提高编程效率,在循环中使用数组可以用很短的代码按顺序读取或写入数组元素。栈和队列都是无需指定地址和下标就可......
  • 树状数组
    HH的项链看到这题,我首先想到了用flag[]数组标记,很明显这是必需的。但随着代码进行,又会遇到一个问题:如1212,如果按照正常标记后面两个就不会被标记,那遍历3到4时,结果为0。顺着思路想,如果我们在用完一次后把它丢掉,重新遍历,这也就导致我们必须要采用一种有序遍历,从而让后面的更......