树状数组和区间树
文章平均质量分 77
SeasonJoe
这个作者很懒,什么都没留下…
展开
-
codeforces712E Memory and Casinos(区间树)
题意:有n个赌场,你在i赌场时,有pi的概率走到i+1,有1−pi的概率走到i−1.保证任何时候pi≤pi+1有q次操作,修改一个赌场的p值;或者询问[l,r]表示从第l个赌场走到r的概率,他在走的过程中不会离开区间[l,r].要点:比较容易看出是区间树,但是这个概率的处理很复杂,基本思路可以参考下面这个博客:参考博客:点击打开链接但是这个博客还有网上我找了一下,有一个原创 2016-11-25 21:50:58 · 344 阅读 · 0 评论 -
HDU1166 敌兵布阵(线段树)
题意:中文题要点:就是一个单点更新的线段树问题,之前一直用线状数组,现在学了一下线段树,这两个能处理的问题都差不多,线段树好理解一些,基本就是存储将一个区间不断二分,形成一个树,方便查询和更新。#include#include#includeusing namespace std;const int N = 50000 + 5;int sum[N << 2];int原创 2016-10-15 16:12:10 · 296 阅读 · 0 评论 -
POJ2155 Matrix(经典二维树状数组)
题意:给出一个矩阵,其中的元素要么是0要么是1,现在有两种操作,一种是将一个子矩阵内的元素全部反转,一种是查询元素(x,y)对应的值。要点:这题是非常经典的一道二维树状数组题,难点是怎么修改子矩阵内的值,其实只要每次修改(x1,y1),(x1,y2+1),{x2+1,y1},(x2+1,y2+1)这四个点的值即可。主要思路可以参考这个论文:点击打开链接这个论文里有点说的不是很清原创 2016-08-31 10:53:51 · 486 阅读 · 0 评论 -
二维树状数组
刷cf的时候做到一道题,让求矩阵中任意一个子矩阵的元素之和,当时看了一下别人的题解,发现跟树状数组有点像,然后查了一下果然是树状数组,不过是二维的。这里就总结一下二维树状数组的过程。问题:一个由数字构成的大矩阵,能进行两种操作 1) 对矩阵里的某个数加上一个整数(可正可负) 2) 查询某个子矩阵里所有数字的和,要求对每次查询,输出结果。求任意子矩阵可以由sum(x2, y2)原创 2016-08-30 21:49:16 · 448 阅读 · 0 评论 -
PAT1057 Stack (30)(树状数组)
题意:模拟一个栈,要求可以输出中位数。思路:这题还是有点意思,看题意就知道会卡时间复杂度,想着用multiset试一下发现果然有几个点过不去,后面就没想出来。实际这题应该用树状数组做:Push x:就update(x,1),就是树状数组的区间更新,c[i]+=1,说明值为i的数出现并更新与其相关的数 Pop:就update(x,-1),c[i]-=1,将值为i的数以及和它相关的数...原创 2018-05-21 22:21:48 · 419 阅读 · 0 评论 -
树状数组求逆序对
求逆序对最常用的方法就是树状数组了,确实,树状数组是非常优秀的一种算法。在做POJ2299时,接触到了这个算法,理解起来还是有一定难度的,那么下面我就总结一下思路:首先:因为题目中a[i]可以到999,999,999之多,在运用树状数组操作的时候,用到的树状数组C[i]是建立在一个有点像位存储的数组的基础之上的,不是单纯的建立在输入数组之上。 比如输入一个9 1 0 5 4(最大9),那么C[i]原创 2015-12-06 11:46:03 · 7556 阅读 · 1 评论