
前缀和
文章平均质量分 87
chp的博客
这个作者很懒,什么都没留下…
展开
-
数据结构—树状数组
树状数组初学起来还是比较难以理解,过弄明白之后代码就很好写了,树状数组相当于是拿空间换时间,原数组为。(将a[i]变成b,就相当于a[i]+b-a[i],更改操作可以转换成+操作)都需要更改其对应的。树状数组是用来快速求前缀和的,传统的单点修改、区间查询要么单点修改的复杂度是。,树状数组相当于一个比较综合的算法,树状数组的查询时间复杂度和修改时间复杂度都是。下面这张图基本上是讲解树状数组必用的一张图。这是查询操作,我们还需要修改操作,每次修改。有一道树状数组的最经典例题可以做一下,假设我们已经维护好了。原创 2023-07-21 14:36:21 · 256 阅读 · 0 评论 -
AcWing 239. 奇偶游戏—带边权并查集、带扩展域并查集解法
这道题比较有意思,可以由前缀和的思想来解决,[l,r]为偶数,说明[0,l-1]和[0,r]的奇偶性相同;[l,r]为奇数,说明[0,l-1]和[0,r]的奇偶性不同;扩展域的解法我是第一次遇到,大致的思想就是用并查集维护条件,当其中一个条件成立,那么集合中所有条件都应该成立。是一种带边权的并查集,维护当前节点相对父节点位置即可,食物链那道题有三种情况,同类、吃、被吃,这道题只有两种情况,奇、偶。原数据的范围是[0,n],开辟一个新的空间(域)来表示不同的情况。举个例子,假设题目中x,y的范围原创 2023-07-20 11:27:11 · 293 阅读 · 0 评论 -
AcWing 102. 最佳牛围栏—二分
那么前缀和(>=f个数)的值大于0即可,如果不让每个数减去。这道题还是挺精妙的,分析没看懂可以看代码,应该比较容易理解。是否能取到就行,这里有一个巧妙地方法,我们让每个数减去。这道题是一道比较巧妙的二分+前缀和问题,首先数据有。考虑以某一个位置(>=f)为结尾位置的最大。从小到达遍历,所以可以记录下所有。这里考虑二分方法,二分可能的。是可行的,二分的时间复杂度为。,重点是如何判断当前的。暴力枚举肯定行不通。这表示能够得到当前的。,所以只需要求最小的。原创 2023-07-07 12:46:42 · 189 阅读 · 0 评论