树状数组
johsnows
正在静下心来学算法的acmer
展开
-
2020kickstart C Candies
题意:给出数组a,有询问更新操作,更新是单点更新pos, x,更新a[pos]=x,询问是问l,r区间内的sweet值,定义是:(-1)i-lAi× (i - l + 1)比如:[3, 1, 6] is 3 × 1 - 1 × 2 + 6 × 3 = 19 [40, 30, 20, 10] is 40 × 1 - 30 × 2 + 20 × 3 - 10 × 4 = 0 [2, 100] is 2 × 1 - 100 × 2 = -198解题思路:维护两个树状数组,一个s1..原创 2020-06-05 17:32:09 · 195 阅读 · 0 评论 -
cf1262D2 Optimal Subsequences (Hard Version)(二分答案+bit)
解法:转换题意后,这题就是给定一个序列a,给出m个询问,问[0,k]的第pos小的数.特殊就特殊在是从0开始的。可以保存询问,我们让不同的询问ki从小到大排列,从小到大枚举k,将前ki个数存入树状数组,这时候可以通过二分答案来枚举答案mid,查询小于等于mid的数num,找出num=pos的最小的mid,就是第pos小的数了。时间复杂度是O(nlog^2n)应该能更快...还没...原创 2019-11-29 19:37:19 · 236 阅读 · 0 评论 -
poj 2155 Matrix (二维树状数组)
题意:一个初始为0的n*n矩阵,有m个操作,c为区间取反,q为单点查询解题思路:对于区间更新单点查询的题目,用树状数组是极好的,更新区间(a,b)我们update(a, 1), update(b+1, -1),然后查询的时候直接输出query(x)就是单点的值。这个题需要扩展到二维,其实解法类似, update(x1, y1, 1); update(x2+1, y1,原创 2017-04-07 22:09:56 · 295 阅读 · 0 评论 -
POJ 3468 A Simple Problem with Integers (树状数组区间更新)
题意:给出N个数,进行Q次操作,有两种操作,一种是区间查询,一种是区间更新.由于这题感觉没什么附加条件,比较裸,博主懒得写线段树,直接上了树状数组,但是区间更新的时候我是区间内每个点去更新的,所以返回结果果断tle.然后去网上学了一发树状数组区间更新的姿势,比线段树要快,也很巧妙.用两个bit数组维护前缀增量 即二维数组bit[2][maxn]当[l,r]区间增加c时, 不难得出, [原创 2016-08-17 21:47:10 · 465 阅读 · 0 评论 -
hdu 3584 Cube(三维树状数组)
题意n*n*n空间内,对一个以(x1, y1, z1), (x2, y2, z2)连成的线为体对角线的长方体的值取反,查询(x,y,z)的值。初始值为0解题思路:用三维树状数组区间更新单点查询。三维的树状数组容斥起来麻烦一点。代码:#include using namespace std;int n, m;int bit[105][105][105]原创 2017-04-21 21:50:44 · 487 阅读 · 0 评论 -
codeforces 831 E Cards Sorting(bit+stl)
题意:n个牌,牌上有数,每次从牌顶取出一张牌,如果这张牌是当前的最小值那么就把它扔掉,不然放到牌堆底,问需要多少次操作把牌扔光。解题思路:将牌记录下初始位置,按大小排序,然后按顺序取出,用树状数组查询扔牌的时候前面访问了多少张牌。但是需要注意个问题,从一个最小值取完的时候,下一个最小值的牌的选择应该要从上一次扔牌的右边第一张开始。比如32 1 2这组数据,扔原创 2017-07-14 15:25:47 · 554 阅读 · 0 评论 -
hdu 4417 Super Mario(主席树||cdq分治+树状数组)
主席树和cdq分治都可以,而且都是很入门的做法。这道题主席树的写法要好写一些,但是如果带修改的话,就得用cdq分治了。主席树代码:#include using namespace std;const int maxn=1e5+5;struct node{ int l, r, x;}val[maxn*40];int tot, root[maxn], a[ma原创 2017-08-09 17:43:35 · 440 阅读 · 0 评论