
线段树
文章平均质量分 68
Green_G
这个作者很懒,什么都没留下…
展开
-
codeforces 383C Propagating tree
给一棵树,有20w个结点,每一个节点有一个初值,接下来有20w个询问,支持两种操作,一种是对某个节点+x,然后对子节点-x,再对孩子节点的子节点+x...,另外一种操作是查询某个节点的值。如果用朴素的做法,查询是o(1)的,但是更新的操作是o(n)的,这样显然是不行的。更新是对奇数层和偶数层节点进行更新,接下来神奇地运用了dfs序,对整个树进行dfs,并对点标上时间戳,更新一个节点就要对整原创 2015-02-06 23:33:31 · 388 阅读 · 0 评论 -
Hdu 5172 GTY's gay friends
题目链接:点击打开链接题目大意就是,给一段序列,长度为10^5,然后有10^5个询问,每次询问为一个区间,l为左边界,r为右边界,该区间是否为一个1到r-l+1的一个排列,即该区间是否满足包含1到r-l+1的所有元素。分析一下,如果一个长度为n的区间包含从1到n的所有元素,那么在该区间之内,1到n的元素每个只出现一次,而且这个区间和应该为n(n+1)/2。第二个条件只需要处理前缀和即可,第原创 2015-02-09 19:53:33 · 659 阅读 · 0 评论 -
bzoj 1036 树的统计
题目链接:点击打开链接题目大意:有一棵树,30000个点,每个点有权值,接下来有20w个操作,分为三种,一是改变某个点的权值,二是询问从a到b的路径上的点的权值的最大值,三是询问a到b上点的权值和。一道裸的树链剖分+线段树:对于树上的路径问题,可以先进行轻重链划分,再用线段树解决。轻重链剖分和点的重标号可以用dfs也可以用bfs#include #include #原创 2015-03-14 09:24:53 · 311 阅读 · 0 评论 -
HDU 5273 Dylans loves sequence
点击打开链接有一个长度为1000的数组,有10^5个询问一段区间[L,R]之内有多少个逆序对。因为数组长度为1000,所以可以把结果保存下来然后O(1)查询,求逆序对有很多方法,树状数组线段树或者用分治归并。第一次用线段树写逆序对。。。线段树求逆序对的方法就是将数组降序排序,相同的元素按下标降序排序,排好序之后,再按照顺序插入线段树并标记,线段树的叶子节点的位置代表元素原来的位置,原创 2015-06-22 16:12:45 · 322 阅读 · 0 评论 -
HDU 5266 pog loves szh III
点击打开链接一棵树一共有3*10^5个结点,标号为1~N,接下来有3*10^5个询问,给出两个数字L,R,问标号L到R的最近公共祖先是几号结点,默认1号结点为树根。首先要注意一个问题,这里有10^5数量级的点,如果退化成一条链,在进行dfs的时候就会爆栈,解决方法有3,bfs或者手动dfs或者加黑科技#pragma comment(linker, "/STACK:102400000原创 2015-06-23 08:28:56 · 286 阅读 · 0 评论 -
BNUOJ 52317 As Easy As possible
题目大意 一个字符串长度为10^5,由’e,a,s,y’四种字符组成,给定一个闭区间[l,r],问区间之内最多有多少个互不重叠的子序列easy。 例如对于eeaseyaesasyy,只有两个easy。经典的倍增查询区间值问题。 对于一个字符串,一定是从左端点开始贪心地找子序列是最佳的方案,也就是需要固定左端点。那么只需要维护每个左端点开始的答案就可以了。而实际要求的子序列就是多个easy的重复原创 2016-10-05 21:51:35 · 284 阅读 · 0 评论 -
CF 739C Alyona and towers
题目大意:有n(n≤105)n(n\leq10^5)个塔排成一排,每个塔有一定的初始高度hih_i。 现有操作,对于l,r(1≤l≤r≤n),dl,r(1\leq l\leq r\leq n),d,能够将ll到rr的塔升高dd个单位。问每次操作之后最大区间l,rl,r满足存在k(l≤k≤r)k(l\leq k\leq r)使得hl<hl+1...hk−1<hk>hk+1>...hr−1>hrh_l原创 2016-11-26 23:06:14 · 956 阅读 · 0 评论