
树状数组、线段树
文章平均质量分 69
chp的博客
这个作者很懒,什么都没留下…
展开
-
AcWing 1275. 最大数—线段树单点修改
拿区间[1,10]举例,可分为如图所示的小区间,由于这里和堆很像,所以也是用数组来存所有的点,最多不超过4n个区间。能使用线段树的题有一些特点,就是大区间的属性能从小区间得到,比如求max,max([1,10])=max{max([1,5]),max(6,10)},线段树一共有4个基本操作,分别是。线段树是以区间来考虑问题,保存的基本信息有区间的左边界、右边界、区间的属性(sum、min、max…:由两个子区间更新父区间,例如max([1,10])=max{max([1,5]),max(6,10)}原创 2023-07-25 17:01:24 · 194 阅读 · 0 评论 -
AcWing 244. 谜一样的牛—树状数组、二分
树状数组用来求前缀和sum(x),二分求解最小的数x,使得sum(x)==k,那么x就是当前第k小的数,然后让f[x]-1,再找下一头牛的高度。这道题挺巧妙的,感觉树状数组方面的题就是比较难想,先分析一下样例,样例中每头牛前面比自己低的牛的数量分别为。牛的高度是1~n的排列,如何分析出每头牛的高度呢,可以考虑从后往前分析。现在每头牛高度的可能性为1,2,3,4,5。每头牛高度的可能性为 2,3,4,5。每头牛高度的可能性为 2,4,5。每头牛高度的可能性为 2,4。每头牛高度的可能性为 2。原创 2023-07-23 18:58:13 · 179 阅读 · 0 评论 -
数据结构—树状数组
树状数组初学起来还是比较难以理解,过弄明白之后代码就很好写了,树状数组相当于是拿空间换时间,原数组为。(将a[i]变成b,就相当于a[i]+b-a[i],更改操作可以转换成+操作)都需要更改其对应的。树状数组是用来快速求前缀和的,传统的单点修改、区间查询要么单点修改的复杂度是。,树状数组相当于一个比较综合的算法,树状数组的查询时间复杂度和修改时间复杂度都是。下面这张图基本上是讲解树状数组必用的一张图。这是查询操作,我们还需要修改操作,每次修改。有一道树状数组的最经典例题可以做一下,假设我们已经维护好了。原创 2023-07-21 14:36:21 · 256 阅读 · 0 评论