树状数组
weixin_44019404
这个作者很懒,什么都没留下…
展开
-
POJ - 2763 动态lca加dfs序树状数组
一开始用树链剖分做的,后来看题解有一个稍微代码量少一点而且不用一错误的方法,lca加上树状数组。 对一条边变成w等于把深的点包括自己和子树全部加上w,即在dfs中l,r区间更新即可。 第一次写了st表求lca,有点不顺手,记录一下模板。 #include<iostream> #include<cstring> #include<algorithm> #inclu...原创 2019-10-30 18:25:53 · 113 阅读 · 0 评论 -
树状数组POJ3468
#include<iostream> #include<cstring> #include<algorithm> #include<cmath> #include<cstdlib> #include<climits> #include<stack> #include<vector> #include&l...原创 2019-03-21 20:04:21 · 143 阅读 · 0 评论 -
POJ 1990 树状数组
非常好的一道题,算是树状数组应用的经典了。 这里我们可以很容易就感觉到这道题其实就是在求两两之间的和。每一个等于distance*max(vi,vj)。 直接n^2去做是肯定超市的,只有1000ms给了20000的数据量,所以我们需要来优化。 优化回去往如何去计算两两之间的去思考,不然一直都会有n^2的数据量。 我们将数据从小到大按照val排序,那么往后推的时候,一定有当前有的val值乘以所有和它...原创 2019-03-25 18:53:38 · 193 阅读 · 0 评论 -
POJ 2739 树状数组的应用
我这里显示离散化了2-1000的质数,把集合1-index,每个对应质数2,3,5,7,11… 我们可以知道如果查询的是n,又需要质数连续,假设i-j区间和为n,则ans++。这就是最朴素的思路。 我们顺着这个思路假设用最古老的方法,先遍历一遍已经做好的集合,算出sum,这样太慢了。 我们看到这道题用在了,单点更新,求区间前缀和,想到最快的方法,就是树状数组了。 那么就用树状数组来求前缀和就好了。...原创 2019-03-23 16:13:47 · 86 阅读 · 0 评论 -
LATIN AMERICAN REGION CONTEST F题离散化加树状数组
记录一下,带权最长上升序列的模板。 用树状数组去优化。 这里先排序了第一个值,再逆序第二个值。 这样的话,每次更新前面比他小的值,都是上一个状态的,不会和当前产生冲突,可以理解成滚动数组。 我们知道树状数组的特点,通过维护后缀来计算前缀,这里把右端点离散化,然后每一次查询当前的右端点是哪一个,查询右端点前面的最大值,然后加上自己的值,更新自己的后缀,我一直以为树状数组只能用来做,类似前缀和的问题,...原创 2019-04-06 21:46:02 · 90 阅读 · 0 评论 -
Count The Rectangles
树状数组加上扫描线。 我们可以发现的是夹在平行于x轴的两根线中的所有平行于y轴的竖线,对于答案的统计时nums*(nums-1)/2,故我们可以建立权值树状数组。 枚举两条x的线,然后插入y的线,每一次统计总共有多少根线夹在中间。 #include<iostream> #include<cstring> #include<algorithm&g...原创 2019-08-12 19:51:50 · 147 阅读 · 0 评论 -
2019牛客暑期多校训练营(第七场)E-Find the median
离线+树状数组+二分 首先记录下所有的位置,Li和Ri,做离线处理(首先需要离散化)。 对于每一个时刻,我们进行插入和查询的操作。做权值树状数组。 在Li位置+1,Ri位置-1,使得离散化后的两个端点,区间更新,然而问题出现在,我们如何进行查询。 我们可以知道,中间的那个数字,其实就是以他为端点的左区间,权值和小于n/2,所以二分一个中值出来,查询中值的左区间,看看是否满足条件。 那么我们离散化了...原创 2019-08-12 21:24:04 · 146 阅读 · 0 评论