线段树
文章平均质量分 72
Linda_yezi_coder
这个作者很懒,什么都没留下…
展开
-
Codeforces Round #742 (Div. 2) E. Non-Decreasing Dilemma(线段树)
题目链接题目大意给你一个长度为 nnn 的数组 aaa每次有两种操作1 x y:ax=y1 \ x\ y: a_x = y1 x y:ax=y2 l r:2 \ l \ r:2 l r: 问你区间 [l,r][l, r][l,r] 内有多少对 (p,q),l≤p≤q≤r(p, q), l \leq p \leq q \leq r(p,q),l≤p≤q≤r 满足子序列 ap≤ap+1≤⋯≤aqa_p \leq a_{原创 2021-09-06 16:21:55 · 368 阅读 · 1 评论 -
2021杭电多校第四场 1008——Lawn of the Dead
题目大意给你一个 n×mn\times mn×m 的矩阵,给你 kkk 个点,表示这些点不可走,你从起点 (1,1)(1,1)(1,1) 出发,你每次只能向下或向右走,问你有多少个点是可到达的解题思路由于这道题没有限制总的 n×mn\times mn×m 之和小于一个值,题面给的是 ∑n≤107,∑m≤107\sum n \leq 10^7, \sum m \leq 10^7∑n≤107,∑m≤107,所以不可以直接 bfsbfsbfs我们可以用两个线段树来做,两个线段树进行滚动,一个线段树维护的是原创 2021-09-03 10:16:52 · 145 阅读 · 0 评论 -
2021牛客多校第二场 A——Arithmetic Progression
题目大意给你一个长度为 nnn 的数列 aaa ,数列中每个元素都不一样,问你存在多少个区间,这些区间内的数排序后是一个等差数列解题思路对于一个区间,如果这个区间内的数排序后的元素可以构成一个等差序列,那么一定满足下列性质max−min=(r−l)×gcdmax - min = (r - l) \times gcdmax−min=(r−l)×gcd其中 gcdgcdgcd 是区间差分绝对值的最大公约数minminmin 是区间的最小值maxmaxmax 是区间的最大值我们做这题的思想是,枚举原创 2021-08-12 00:17:58 · 323 阅读 · 0 评论 -
2021牛客多校第一场 J——Journey among Railway Stations
题目大意有 nnn 个车站,每个车站开放时间为 [ui,vi][u_i, v_i][ui,vi],车辆经过第 iii 个车站到第 i+1i+1i+1个车站的时间为 cost[i]cost[i]cost[i],如果提前到达一个车站可以等待,如果到达第 iii 个车站的世界超过 viv_ivi 则不能在这个车站停车,有 qqq 次操作0 l r:0 \ l\ r:0 l r:能否从 lll 车站出发经停每个车站最后到达 rrr 车站,可以输出 YesYesYe原创 2021-08-10 21:09:48 · 310 阅读 · 2 评论 -
2021牛客多校第一场 C——Cut the Tree
题目大意给你一棵树,每个点都有一个权值,让你在所有点中选择一个点删除,使得剩下的子树的最长上升子序列长度最小解题思路首先如何求树上最长上升子序列参考博客如何删点首先,我们任取一个点 ppp 考虑删除点 ppp 的结果,删除点 ppp 之后,我们只需要考虑 ppp 的子树的最长上升子序列长度,即为答案,同时我们记录一下是哪一棵子树的最长上升子序列最长,我们如果要删其他点的话,那要删去的点一定在这棵子树之中(因为你再删除了这棵子树上的点的其他点是没有意义的,并不会对答案造成贡献)。然后,如何选取原创 2021-08-05 10:34:56 · 330 阅读 · 0 评论 -
树上最长上升子序列——线段树合并
模板求一棵树上的最长上升子序列的长度解法线段树合并我们对于树上每一个点 xxx,发现经过它的一条路径LIS由两部分组成。以 xxx 开头的左子树最长上升子序列 + 右子树最长下降子序列 - 1以 xxx 开头的左子树最长下降子序列 + 右子树最长上升子序列 - 1一开始所有点的 LISLISLIS 和 LDSLDSLDS 都是1,我们从底向上合并答案首先dfs到底,然后向上回溯Code#include <bits/stdc++.h>#define ll long long原创 2021-08-05 10:22:23 · 858 阅读 · 0 评论 -
Educational Codeforces Round 2 E. Lomsat gelral——线段树合并
题目大意给你一棵树,每个树的结点都有一个颜色编号,问你对于每个结点,这个结点及其子节点出现过的颜色次数最多的编号之和是多少(题意有点绕)解题思路我们对于每一个结点建立一个权值线段树,树上的记录这个结点出现过最多次数的颜色编号之和(也就是ans),以及颜色最多出现的次数num。然后在dfs题目所给树的时候合并这些节点树并更新答案。怎么pushup呢?当左子树的num < 右子树num时,我们的ans和num都取右子树的当左子树的num > 右子树num时,我们的ans和num都取左子树原创 2021-07-30 20:17:50 · 109 阅读 · 0 评论 -
动态开点与线段树合并
权值线段树在一些计数问题中,线段树用于维护值域(一段权值范围),这样的线段树也称为权值线段树。动态开点为了降低空间复杂度,我们可以不建出整棵线段树的结构,而是在最初只建立一个根节点,代表一整个区间,当需要访问线段树的某棵子树时,再建立代表这个子区间的结点。采用这种方法维护的线段树称为动态开点线段树。动态开点线段树抛弃了完全二叉树父子结点二倍的编号原则,改为用变量记录左右子节点编号建立线段树codestruct Tree{ int l, r; int dat;}tree[MAXN原创 2021-07-30 10:42:17 · 214 阅读 · 0 评论 -
HDU 3911 区间反转——线段树
题目大意给你一个长度为n的01串,给你进行m次以下操作1、0 l r 输出区间[l, r]最长连续1的长度2、1 l r反转区间[l, r]的01串解题思路由于连续1串具有线性的性质,且这题至少需要一个O(nlogn)O(nlogn)O(nlogn)的复杂度,我们考虑用线段树来维护区间最大连续1串长度,但是考虑有反转的操作,我们同时也维护最大连续0串的长度,这样反转之后我们只需要交换这两个值即可。我们对于每个树上的节点要维护六个值ans1ans1ans1:区间最大1串长度lnum1lnum1原创 2021-07-29 10:22:14 · 787 阅读 · 0 评论 -
AcWing 248. 窗内的星星——扫描线算法
题目链接题目大意在一个天空中有很多星星(看作平面直角坐标系),已知每颗星星的坐标和亮度(都是整数)。求用宽为w,高为h(h,w为整数)能圈住星星的亮度总和最大是多少(边界上的星星不算)标题...原创 2021-07-20 10:49:39 · 169 阅读 · 0 评论 -
AcWing 247.亚特兰蒂斯——扫描线算法
原题连接题目大意给你n个矩形,求这n个矩形的面积并解题思路加粗样式原创 2021-07-19 21:51:58 · 265 阅读 · 0 评论 -
AcWing 246. 区间最大公约数
题目链接题目大意给定一个长度为N的数列A,以及M条指令(N<= 5e5, M <= 1e5),每条指令可能是一下两种之一:“C l r d”,表示A[l], A[l+1], …, A[r]都加上d“Q l r”,表示询问A[l], A[l+1], …, A[r]的最大公约数(GCD)对于每个询问,输出一个整数表示答案解题思路两个重要的结论gcd(x, y, z) = gcd(x, y - x, z - y)同理可以推广到任意多个数gcd(a, b) = gcd(a, -b原创 2021-07-14 15:21:32 · 124 阅读 · 0 评论 -
AcWing 245. 你能回答这些问题吗——线段树
题目链接题目大意给你一个长度为N的数列A,以及M条指令(N <= 5e5, M <= 1e5),每条指令可能是以下两种之一:“1 x y”,如果x > y,则交互xy,查询区间[x, y]中最大连续子段和,即maxx ⩽ l ⩽ r ⩽ y{∑i = lrA[i]}max{}_{{}x\ \leqslant \ l\ \leqslant \ r\ \leqslant \ y}\{ \sum^原创 2021-07-14 12:21:03 · 166 阅读 · 0 评论 -
Codeforces Round #731 (Div. 3) F. Array Stabilization (GCD version) ST表+二分
题目链接题目大意给你n个数,问你多少次操作之后可以把这n个数变为相同的数。定义一次操作如下,每个数与后一个数取gcd,如果是最后一个数那么就与第一个数取gcd来代替原来这个数。例如????=[16,24,10,5]operatora=[gcd(16,24), gcd(24,10), gcd(10,5), gcd(5,16)] =[8,2,5,1].解题思路首先可以分析出,最后n个相同的数是最初的n个数取gcd,设为g对于题目给的操作我们进行简单的分析可以发现,对于n个数任意一个数,他进行原创 2021-07-12 15:58:19 · 145 阅读 · 0 评论