随笔分类 -  数据结构—树状数组与线段树

摘要:留坑代填 阅读全文
posted @ 2019-10-27 22:53 JBLee 阅读(87) 评论(0) 推荐(0)
摘要:题目链接 思路: 这道题其实还是普通的区间修改和查询问题,只不过序列变为了环形,所以就是小小的改一下就可以了。 分类讨论一下,如果输入的l<r,那么就是照常修改和查询。但由于是环形,所以会出现l>r的地方,其实也就是这样拆成l-n和1-r两个操作即可。 代码,不需要代码,太水了 #include<b 阅读全文
posted @ 2019-10-06 19:46 JBLee 阅读(183) 评论(0) 推荐(0)
摘要:题目链接 看这道题的时候,题目中的借教室我们可以看作是区间修改,如果有一天不符合的话都不行,第一反应就是线段树,维护最小值,查询的时候看是否满足要求,满足的话就区间修改。以此类推,直到出现不满足的情况。 但是由于常数问题还是要O2优化才能过,不然只有95分。 代码如下: #include<cstdi 阅读全文
posted @ 2019-09-15 16:51 JBLee 阅读(186) 评论(0) 推荐(0)
摘要:challenge 0: 水题,暴力修改都能过。 #include<bits/stdc++.h> using namespace std; const int maxn=1000010; int n,m,k,p; char flag; int a[maxn]; int main() { scanf( 阅读全文
posted @ 2019-08-29 21:40 JBLee 阅读(258) 评论(0) 推荐(0)
摘要:题目链接 读题发现,题目里有三种连边方式: 1.两点之间连一条有向边。 2.一个点与给定区间中的点连一条有向边。 3.给定区间中的点和一个点连一条有向边。 剩下的就是跑最短路。 两点之间连边很好处理,但是如何在区间之间连边?按平时链式前向星加边,最坏可能是n方的复杂度,建个边都要死。 这时就有线段树 阅读全文
posted @ 2019-08-21 15:29 JBLee 阅读(185) 评论(0) 推荐(0)
摘要:题目链接 刘汝佳书上的题目,可以把矩形的每一行都开一棵线段树,最多也就20棵,空间也炸不了。然后就是线段树操作了。 注意:下传的时候最大,最小值也要更新。同样注意标记的优先级顺序。 代码如下: 1 #include<bits/stdc++.h> 2 using namespace std; 3 co 阅读全文
posted @ 2019-08-20 22:25 JBLee 阅读(184) 评论(0) 推荐(0)
摘要:题目链接 偶然在讨论里看到这道题,就进来了。 看了一下发现是求区间的平均数及方差,所以肯定是要用线段树来维护的。区间平均数好求,直接求一遍区间和再除以区间长度就是了。 关键是区间方差的问题,做这题的时候还忘了方差是什么东西,真的sb,初中数学白学了。其实这样也比较可以。 手推一下就能够比较容易地发现 阅读全文
posted @ 2019-08-18 22:58 JBLee 阅读(360) 评论(0) 推荐(0)
摘要:线段树区间异或,四倍经验,666。 关于线段树区间异或: 就是维护区间0的个数,1的个数,取反实际上就是把他们swap一下,总数不变,lazy标记改为^1即可 洛谷有四倍经验 给出题号:P2574,SP7259,P2846,P3870。 P3870代码如下: #include<bits/stdc++ 阅读全文
posted @ 2019-08-08 17:40 JBLee 阅读(247) 评论(0) 推荐(0)
摘要:题面 题解: 线段树合并的好题。在这题中我们可以用并查集维护连通块,因为要统计第k大,所以还可以用线段树合并来统计子树之间的信息。 坑点:1:注意炸内存 2:最后输出的是编号,要存起来 3:注意值域线段树中查询第k大的写法 代码如下: #include<cstdio> using namespace 阅读全文
posted @ 2019-07-24 09:53 JBLee 阅读(221) 评论(0) 推荐(0)
摘要:线段树合并裸题,其实这道题就可以看作每一个点的子树中比它的点权大的值的个数。看这道题的值域范围,知道要用动态开点的线段树,然后我们可以将p数组离散化,每一个点都建一棵对应的值域线段树。最后从根节点开始遍历,回溯时将有上司和下属关系的点合并即可。 而关键是合并操作: 其实还是很好理解的,我的代码没有新 阅读全文
posted @ 2019-07-23 21:46 JBLee 阅读(206) 评论(0) 推荐(0)
摘要:题目描述 有一个 n 个元素的数组,每个元素初始均为 0。有 m 条指令,要么让其中一段连续序列数字反转——0 变 1,1 变 0(操作 1),要么询问某个元素的值(操作 2)。 例如当 n = 20 时,10 条指令如下: 输入输出格式 输入格式: 第一行包含两个整数 n, m,表示数组的长度和指 阅读全文
posted @ 2019-04-29 16:31 JBLee 阅读(288) 评论(1) 推荐(0)
摘要:有点意思,不需要什么懒标记之类的东西,因为一个数无论怎样开平方,最后取整的结果必然会是1,所以我们不妨用最大值来维护,若区间最大值不为1,就暴力修改,否则不用管。 多说几句,数据比较毒瘤,狂开unsigned long long 就能AC 阅读全文
posted @ 2019-04-27 14:04 JBLee 阅读(237) 评论(0) 推荐(0)
摘要:震惊,双倍经验,依旧是线段树的乘法修改 阅读全文
posted @ 2019-04-27 10:47 JBLee 阅读(217) 评论(0) 推荐(0)
摘要:线段树的模板,但是还应注意维护乘标记,乘法的优先级大于加法,一定记得还要取模。 真的还需要耐心啊! 阅读全文
posted @ 2019-04-22 16:34 JBLee 阅读(137) 评论(0) 推荐(0)