随笔分类 - 数据结构————线段树
摘要:gate 有向图求最短路,需要进行三种操作: 点向点连边 点向区间连边 区间向点连边 用线段树优化建图可以解决。 建立两棵线段树,一棵存入边,一棵存出边 入边: 出边: 所以线段树看起来应该是这样子的: 线段树内的边权为0。 code #include<cstdio> #include<iost
阅读全文
摘要:gate 有pi的概率取最大,1−pi的概率取最小。 首先把权值离散化 每个节点开一棵线段树,记录每个权值被取到的概率。 对于线段树i,设两个子树为ls,rs,取到值j的概率f[i][j] \(f[i][j] = \\ f[ls][j]*(\sum\limits_{k=1
阅读全文
摘要:gate 线段树合并 设两个要合并的线段树为a,b, 若a或b不存在,则返回另一个。 否则,将b的数值累加到a上,并返回a。 代码如下 int merge(int a,int b,int l,int r) { if(!a) return b; if(!b) retur
阅读全文
摘要:gate 用时:40min(看题解了) 线段树,然而思路不太好想,考虑看题解 每个公路有一个拥堵值a[i],如果当前时间能被a[i]整除,那么通过这条公路需要2分钟,否则需要1分钟,2≤a[i]≤6 由于a[i]的范围很小,lcm(a[i])的最大值只有$
阅读全文
摘要:gate 用时:看题解一上午,写代码120min 省选打完了,继续停课... gg说要做历年省选题,还要看博客...公开处刑... 每个modify操作会复制1倍线段树并修改。 然而实际上不需要维护那么多线段树,维护1棵并在树上dp即可。 对于不同状态的节点有不同的维护操作,需要分类讨论。 (L
阅读全文
摘要:"gate" 还算好想的一个树链剖分+线段树... 修改一段路径的颜色直接区间修改即可。 询问颜色段数量时,线段树的每个节点记录这一段有多少个颜色段。 pushup和query时要检查mid和mid+1是否颜色相同, 例如 递归路径时要检查top[x]和fa[top[x]](两条路径的交界处)是否颜
阅读全文
摘要:gate 当一个数列满足,但它的1,2项不是1,1时, 称它为类斐波那契数列。 它满足以下性质: 若有: 1.设,则 2. 证明: 设,则 3.前缀和公式: 证明: 通过以上性质,发现它可以用线段树维护。 对于每个节点,sum表示区间和; c1,c2表示这段区间被加上了前两项分别为$c1
阅读全文
摘要:传送门 作为给dtx的妹子讲题的交换他给我讲的 果然线段树最可爱了w 扫描线可以用来求矩形的面积并… 一个平面上有一些有重叠的矩形,求他们的并集的面积。 直接放网上的图了x 对于每个矩形,将y坐标拆成两个修改操作(插入和删除),从下到上排序; 将x坐标unique离散化,从左到右排序,用线段树维护切
阅读全文
摘要:传送门 给出一个1到n的全排列,求经过m次局部升/降序排序后,第q位上的数字。(n.m≤1e5) 正解是:二分答案+线段树 (????WTF) 因为n很小,所以可以用二分答案枚举第q位上的数字。 把比二分的这个数mid小的数字全部改为0,其他的改为1,然后对01序列进行计数排序——即统计1的个数,然
阅读全文
摘要:关于线段树的一些算法的模板的汇总。 Luogu P3372 【模板】线段树 1 普通的线段树,区间加法,区间查询。 #include<cstdio> using namespace std; const int maxn = 100005; int n,m,x,y,flag; int l[4*max
阅读全文