数据结构-树状数组
AcerMo
一只辣鸡大学生
展开
-
洛谷 P3368 树状数组【模板2】
这次是区间加值,但是不要慌,可以水过用了一个差分数组的思想之后你会发现,某个区间加值比方说原数组<0,1,3,6,10>差分数组中的状态<1,2,3,4>原数组每个值加二,差分数组中元素除第一位及末位+1位发生了变化,其他没有变化,所以只需要修改差分数组中的修改区间第一位及末位+1位即可代码//By AcerMo#include<...原创 2018-02-26 09:34:50 · 541 阅读 · 0 评论 -
BZOJ3594&&洛谷P3287 [SCOI2014]方伯伯的玉米田
二维树状数组优化DP手动再见大毒瘤这样的出题人就是丧病n2n^2n2只有10分!!!讲一下思路不难发现,每次拔高,必定是从序列中某个地方直接拔高到序列末尾,为啥?我们假设没有拔到末尾,那么有以下几种情况1.拔高区间有一些比左侧低的,现在不低于左侧了2.拔高区间有一些比左侧高的,现在还是高于左侧3.拔高区间有一些不高于右侧的,现在高于右侧了也就是说拔高某一段,会造成1.在它左...原创 2018-10-23 19:50:31 · 309 阅读 · 1 评论 -
BZOJ1106[POI2007]TET-Tetris Attack立方体大作战
树状数组思路不难发现对于1…2…2…1这种情况来说,先删除2比先删除1更优,也就是说有匹配就删掉肯定比先删掉一个后来的匹配要优,对于12…12先删除哪个对答案的贡献是相通的…1…2…1…2…这样先删除1是最优的,所以思路就明朗了,维护一个点到他上次出现的位置有多少还没被删除的点就好了,然后我们就可以用树状数组维护一下洛谷还要输出方案,真毒瘤代码//By AcerMo#include&...原创 2018-10-18 14:42:04 · 330 阅读 · 0 评论 -
Codeforces1042D Petya and Array
树状数组好题思路题目的要求就相当于存在一个sum[r]-sum[l-1]<t的关系,然后我门可以写成sum[r]-t<sum[l-1],所以我们可以先处理一个前缀和数组,然后类比求逆序对的方式,查找在他之前出现的sum[i]>sum[k]-t并且k>i的数量就好了,要注意的一点就是我们在0的位置有一个sum[0]=0不能忽略掉代码//By AcerMo#inclu...原创 2018-10-18 09:45:46 · 273 阅读 · 0 评论 -
BZOJ1452[JSOI2009]count&&洛谷P4054[JSOI2009]计数问题
二维树状数组求前缀和裸题不能再裸啦!具体过程对于每个修改,暴力在树状数组上修改就好,对于询问,根据二维前缀和的性质{i,k}{j,l}的前缀和=s[j][l]−s[i−1][l]−s[j][k−1]+s[i−1][k−1]=s[j][l]-s[i-1][l]-s[j][k-1]+s[i-1][k-1]=s[j][l]−s[i−1][l]−s[j][k−1]+s[i−1][k−1],然后用树状...原创 2018-10-12 15:34:19 · 274 阅读 · 0 评论 -
SPOJ GSS4 洛谷P4514上帝造题的七分钟&&[树状数组进阶]
树状数组大法好讲这道题之前先讲点进阶内容一维树状数组的区间修改+区间求和不会树状数组入门知识的-&gt;出门左转不会树状数组单点修改的-&gt;出门右转好了,现在留下的都是奆佬我们先讲一下区间修改根据之前单点修改,区间求和的思想,发现差分数组非常有用,那么我们不难发现一个有趣的性质,对于差分数组d[i],原数组a[i],存在a[i]=∑k=1id[i]a[i]=\sum\limits...原创 2018-10-12 11:11:00 · 239 阅读 · 0 评论 -
BZOJ3211&&洛谷P4145 上帝造题的七分钟2/花神游历各国
思维题树状数组+并查集维护思路发现最大数101210^{12}1012开根号最大也就开1012−&gt;106−&gt;103−&gt;31−&gt;5−&gt;2−&gt;110^{12}-&gt;10^{6}-&gt;10^3-&gt;31-&gt;5-&gt;2-&gt;11012−>...原创 2018-10-12 07:51:26 · 265 阅读 · 0 评论 -
BZOJ2819 Nim
隔壁尹神说树剖裸题太巨了先说一个~~(你M)~~nim游戏的性质就是所有堆的石子的数量Xor起来不等于0先手必胜,我也不知道咋证明于是乎我们就可以大力维护树上的Xor路径,咋维护呢?先求dfs序,转化成区间问题,然后用树状数组维护一下就好了,查询的时候,求一条x–>rt的Xor路径,再求一条y–>rt的Xor路径,Xor一下,发现lca(x,y)以上就没了,但是少了...原创 2018-09-14 15:57:58 · 201 阅读 · 0 评论 -
BZOJ1103&&洛谷P3459 [POI2007]MEG-Megalopolis大都市
DFS序+树状数组维护差分关于dfs序有一个很神奇的性质,大家应该知道,就是in[x]~out[x]包含了他子树中的所有点,于是我们就可以用这个神奇的性质把树上的问题搞到区间上,这道题咋做嘞?我们先求一个dfs序,之后我们对于每个点x,在树状数组中add(in[x],1)也就是对于在他之后被dfs到的点的差分数组上都 +1,因为这样操作之后,在dfs序上,两点间的距离就是一个前缀和了,然后...原创 2018-09-13 11:10:46 · 227 阅读 · 0 评论 -
BZOJ5278&&洛谷P4375 [USACO18OPEN]Out of Sorts (金组)
智障(shang)题+树状数组维护前缀和我们定义一下冒泡排序的分割点,分割点i的定义就是在他左边的点的rank都小于等于i,右边的rank都大于等于i,也就是说一个分割点出现后,他左边的点不会再跑到右边定义si表示在排名在i之前的数不在i之前的个数不难发现,题目给的程序跑一次,会使一个分割点左侧的点跑到右边,一个右侧的点跑到左边,然后就会使这个点的si-1,所以我们发现,排序的次数就是...原创 2018-09-17 15:12:19 · 363 阅读 · 0 评论 -
POJ2299Ultra-QuickSort
树状数组求逆序对,一个神奇的操作我们先将数组离散化,拿样例来说9 1 0 5 45 2 1 4 3然后呢,我们按顺序加入树状数组,将数离散化后对应下标单点+1,然后每个位置对应的逆序对数,就是它的下标-在它之前出现的出现的数的个数,它的下标就是它之前数的个数,然后在他之前出现的数就是比他小的数量,所以减一下就是比他大的数量插入5的位置 0 0 0 0 1 sum=1,...原创 2018-09-11 16:53:14 · 138 阅读 · 0 评论 -
POJ2352 Stars
树状数组裸题题目很给力,告诉我们输入是有序的,所以每个新输入的节点就只会对他之后输入并且x大于他的点造成影响,然后我们就可以树状数组单点加and区间求和就行了代码//By AcerMo#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#inclu...原创 2018-09-11 15:40:21 · 244 阅读 · 0 评论 -
BZOJ2743&&洛谷P4113 [HEOI2012]采花
离线树状数组,莫队会TLE,气死我了预处理出每个点的下一个相同颜色的位置,然后每次对当前点维护它的下一个点就好了代码//By AcerMo#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#de...原创 2018-09-04 11:08:33 · 229 阅读 · 0 评论 -
洛谷 P3374 树状数组【模板1】
树状数组是将每个元素加到他后面的元素上,每次向后走lowbit(x)位,树状数组中存的是该位之前的前缀和,所以求某个区间和时只需要将区间两个端点的前缀和相减即可,但是如果直接暴力求前缀和一定会T,所以要引入一个新东西 ->lowbit引用大佬的话:我先说个叫lowbit的东西,lowbit(k)就是把k的二进制的高位1全部清空,只留下最低位的1,比如10的二进制是1010,则lowb...原创 2018-02-26 08:36:47 · 404 阅读 · 0 评论 -
BZOJ1264&&洛谷P4303 [AHOI2006]基因匹配
树状数组优化DP毒瘤题暴力60分!讲讲思路最暴力的思路就是n2n^2n2求LCS,能拿到60分得好成绩,如何AC?我也不会,这道题中每个元素都出现了5次,这是个很好的性质,也就是说两个序列的元素是一样的所以我们不妨存下第一个串中每个元素都在哪个地方出现过,那么我们在用第二个串匹配时,直接找到当前元素在a串中出现的位置,因为只有在这些位置才可能有贡献,然后我们用树状数组维护一下每个位置上的L...原创 2018-10-23 20:56:08 · 263 阅读 · 0 评论