![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
树状数组
短小精悍
wind__whisper
qwq
展开
-
P3605 [USACO17JAN]Promotion Counting P(树状数组)
解析做法很多的一道题sol1先求出dfs序,离线下来,然后按权值大小的顺序统计答案并插到对应的dfs序中sol2离散化后,dfs过程中动态维护树状数组,利用前后差值求出答案sol3树上dsu就比较无脑了,暴力维护即可但是代码比前两个难写sol4权值线段树合并这个做法在本题中确实是一点优势也没有兼具了常数大和难编写的双重优势(bushi总的来说,前两种做法比较推荐代码使用的是soltion1别问我为什么当时还敲了个树剖和线段树上去#include<bits/stdc+原创 2021-11-18 08:33:27 · 389 阅读 · 0 评论 -
CF1404C:Fixed Point Removal(离线)(树状数组二分)
解析写了不少线段树上二分,原来树状数组上也是可以二分的首先如果ai>ia_i>iai>i,那必然无法删除,下面只考虑ai<=ia_i<=iai<=i的情况本题试图离线不难想到,但我一开始总是按照刻板思维尝试按序移动左端点,结果根本没法做…反过来想,移动右端点就可做多了设fif_ifi表示当前右端点为r的情况下,[i,r]最多可以删掉的数量那么我们当把r移动到r+1时,只有fi>=i−aif_i>=i-a_ifi>=i−ai时才会对f原创 2021-11-11 20:35:12 · 141 阅读 · 0 评论 -
模板:树状数组二分
所谓树状数组二分,就是在树状数组上进行二分(逃)解析很巧妙我们都知道可以在线段树上利用其本身平衡二叉的性质进行二分,很多时候能剩下一个log但是树状数组其实也是可以二分的说是二分,其实更像倍增毕竟不同于线段树,树状数组这个数据结构本身就是基于二进制实现的从大到小枚举幂次,然后判断如果指针可以移过去就移动还需要一个累加器记录沿路累加的 f 数组的和代码长度再次吊打线段树代码这个是在单调不增的数组中找到最后一个>=val的位置inline int find(int val){.原创 2021-11-11 17:54:11 · 1315 阅读 · 0 评论 -
NOIP2016&洛谷P1600:天天爱跑步
文章目录解析sol1:树剖+mapsol2:树剖+离线sol3:dfs维护树状数组+差分解析个人认为本题比同年的逛公园可做许多本题的一个关键是:把慢跑者(u,v)(u,v)(u,v)转化为上升路径上满足depx+tx=depudep_x+t_x=dep_udepx+tx=depu的结点和下降路径上满足−dep+x+tx=depu−2∗deplca-dep+x+t_x=dep_u-2*dep_{lca}−dep+x+tx=depu−2∗deplca的结点x的答案均加一这个感觉不是很难想,由原创 2021-11-01 22:50:46 · 350 阅读 · 0 评论 -
动态区间第k小:树状数组套权值线段树
解析如何解决静态区间第k小?使用主席树就ok啦辣么如何解决动态区间第k小嘞…我们想想主席树为啥不能解决动态区间第k小因为如果改了一个点的值,后面所以的权值线段树都需要修改单次修改的时空复杂度为nlognnlognnlogn,无法承受仔细想想,静态的主席树似乎就是一个关于值域的高级一点的前缀和暴力修改前缀和当然是需要修改O(n)O(n)O(n)个了但是既然是前缀和,我们为就可以想到用树状数组优化这样需要修改的东西就变成了O(logn)O(logn)O(logn)个了具体的说,和树状数组的原创 2021-10-23 22:57:57 · 235 阅读 · 0 评论