![](https://img-blog.csdnimg.cn/20190927151053287.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
线段树
线段树
correct!
It's better to burn out than to fade away.
展开
-
线段树动态开点(包含普通线段树的操作)
动态开点的方法在上一篇blog中,不赘述。动态开点的线段树也是一个线段树,也可以完成普通线段树的区间查询,也可以采用懒标记的方法区间修改。但是需要注意的是,在查询或者修改的函数中,需要将根节点代表的区间写入形参。根据参数中的根区间确定子区间。虽然很鸡肋,多学一点是一点。#include <bits/stdc++.h>#define lson(k) c[k].lson#...原创 2020-02-23 21:20:05 · 730 阅读 · 0 评论 -
线段树动态开点
动态开点是主席树的先修课,算是为学习主席树做一个课前预习吧。个人理解动态开点类似于二叉树的链表实现,有两个指针指向左右儿子。动态开点大致也是这样。以求区间最大值为例子,线段树中维护三个信息:当前节点的左儿子节点编号 当前节点的右儿子节点编号 区间最大值首先是建树,建树的函数如下int build(){ ++cnt; c[cnt].l = 0; c[cnt].r = 0;...原创 2020-02-21 20:57:47 · 505 阅读 · 0 评论 -
2020牛客寒假算法基础集训营3 G 牛牛的Link Power II(线段树)
题目链接题目描述牛牛有一颗大小为n的神奇Link-Cut 数组,数组上的每一个节点都有两种状态,一种为link状态,另一种为cut状态。数组上任意一对处于link状态的无序点对(即(u,v)和(v,u)被认为是同一对)会产生dis(u,v)的link能量,dis(u,v)为数组上u到v的距离。我们定义整个数组的Link能量为所有处于link状态的节点产生的link能量之和。一开始数...原创 2020-02-11 12:44:46 · 151 阅读 · 0 评论 -
acwing 245 你能回答这些问题吗
题目链接题目描述:给定长度为N的数列A,以及M条指令,每条指令可能是以下两种之一:1、“1 x y”,查询区间 [x,y] 中的最大连续子段和,即2、“2 x y”,把 A[x] 改成 y。对于每个查询指令,输出一个整数表示答案。思路:首先可以看出来这是一个区间查询,单点更新,线段树搞一下嘛。题目要求的是,最大连续字段和,可以用线段树维护四个变量,我直接写出线段树的结...原创 2020-01-30 13:40:18 · 190 阅读 · 0 评论 -
acwing 246 区间最大公约数
博客详细的讲解了本题的思路解法和易错点原创 2020-01-29 10:02:18 · 246 阅读 · 0 评论 -
POJ 3468 一个复杂的数学问题
题目链接题目大意:一个序列,n个数字两个操作,C x y z 表示 x 到 y 区间内的数字都加 zQ x y 表示查询 x到 y 的区间和线段树模板题,注意数据范围就好了,sum 和 标记都用long long基本就可以了#include <iostream>#include <cstdio>#include <cstring>...原创 2020-01-24 12:06:15 · 147 阅读 · 0 评论 -
线段树模板
上次写线段树,已经是很早之前了,时间久了容易忘,特此重写一次复习一遍// 线段树模板#include <bits/stdc++.h>#pragma warning (disable:4996)#pragma warning (disable:6031)#define mem(a, b) memset(a, b, sizeof a)#define debug puts(...原创 2020-01-23 12:30:38 · 138 阅读 · 0 评论 -
poj 2892 Tunnel Warfare(线段树区间合并)
题目链接题意:有 n 个连续的村庄,m 次操作,每次操作分为三个,D x 表示 x 村庄被摧毁 Q x 表示查询包含 x 村庄的最长连续长度 R 表示修复最近一个被摧毁的村庄对于第一个,如果村庄被摧毁,就直接进行单点修改,把该村庄的连续长度变为0,在返回的时候,就将对应区间的左连续和右连续改一下,左连续是左半区间的左连续,右连续是右半区间的右连续,一次向上更新即可对于第二个...原创 2019-07-31 16:32:58 · 115 阅读 · 0 评论 -
codeforces round #576 div2 D Welfare State(线段树)
题目链接题意:给定一个长度为 n 的序列,共有 q 次操作,每次操作分为两种:1 p x 和 2 x1 p x表示将第 p 个位置的值设为 x2 x 表示将序列中小于 x 的值设为 x解题思路:只需要用一个线段树去维护区间的最小值即可,对于操作 1 ,进行一次单点修改即可,对于操作 2 ,每次查询区间,如果区间内的最小值小于 x ,则对区间内的值进行更新即可,依然可以使用标...原创 2019-07-31 14:28:37 · 483 阅读 · 5 评论 -
线段树区间合并(poj 3667 hotel)
题目链接题意:有一家酒店,又一排n个房间,一共m个询问,如果输入操作为1,接下来再输入一个a,表示来了一群a个人,希望能住在连续的a间房间,如果有连续n间房,输出最左边的连续的a间房间最左边的那个房间,如果没有输出0如果输入操作为2,接下来会有两个数a,b表示有从a开始的连续b个人退房(无输出)了解过线段树的一眼就能看出来这又是一个区间查询问题,可以用线段树辅助解决,但是与RMQ...原创 2019-07-26 14:25:16 · 115 阅读 · 0 评论 -
线段树例题 henu Sanzo' 建议
题目链接题目描述:输入一个数 n ,接下来一行给定一个长度为 n 的序列,输入一个数 m ,接下来 m 次询问,每次询问输入两个数 l ,r,输出数列中 l ,r区间内的异或和。异或有这么一些性质a ^ b ^ a = ba ^ 0 = a通过这些性质,我们可以知道,一个区间 l ,r 内的异或和等于 [l , r - 1] ^ a[ r ] 或者是 [ l , r + ...原创 2019-07-29 19:25:29 · 133 阅读 · 0 评论