随笔分类 - 数据结构-线段树
摘要:"题目链接" Solution 一个简单的 或 线段树.竟然坑了我一个小时... 因为颜色很小,所以把状态压起来. 然后每个节点上的数值代表当前颜色状态. 然后节点合并很简单,直接或起来. 需要注意一下的地方是修改时的 $lazy$ ,要完全覆盖,这里不能或. Code cpp include de
阅读全文
摘要:"题目链接" Solution 树上差分+线段树合并. 在每个节点上维护一棵权值线段树. 然后如果需要修改 $x,y$ 两点,则在 $x$ 处和 $y$ 处分别加上 $1$ 的权值. 然后在 $lca(x,y)$ 以及 $fa[lca(x,y)]$ 处减掉 $1$ . 最后面 $dfs$ 从下往上更
阅读全文
摘要:"题目链接" Solution 线段树. 观察题目可以得到一个小 $trick$ : 对于任意一个节点 $i$ ,那么和它颜色相同的上一个节点 $pre[i]$,肯定不会放在一个区间. 于是考虑对于每一个节点计算它可以献出贡献的区间. 先 $O(n)$ 扫出每一个点的 $pre$ . 然后从左往右,
阅读全文
摘要:"题目链接" Solution 经典的一道线段树题,难点在于如何合并节点. 由于题目要求直线要求不相交,则斜率均大于前面的点即为答案. 所以以斜率为权值. 考虑 线段树 每一个节点维护两个值: $Max$ 代表当前节点中的最大值. $Sum$ 代表对于任意一个节点 $i$ , 其中满足$w_j Ma
阅读全文
摘要:"题目链接" Solution 直接维护一个差分的线段树就好了. 其中线段树的节点代表 $r$ 比 $l$ 多多少. Code cpp include define ll long long define mid (l+r)/2 using namespace std; const int maxn
阅读全文
摘要:"题目链接" Solution 线段树是一门比较刁钻的手艺... 此题我们需要维护 $4$ 个变量: 1. $amx$ 代表当前节点的最大值. 2. $lmx$ 代表当前节点以左端点为起点的区间最大值. 3. $rmx$ 代表当前节点以右端点为结尾的区间最大值. 4. $sum$ 代表整段的和. 然
阅读全文
摘要:题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成。 有长为N的数列,不妨设为a1,a2,…,aN 。有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2)把数列中的一段数全部加一个值; (3)询问数列中的一段数的和,由于答案可能很大,你只需输出这个数模P的值。 输入
阅读全文
摘要:题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1、 查询操作。 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值。 限制:L不超过当前数列的长度。(L>=0) 2、 插入操作。 语法:A n 功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操
阅读全文
摘要:题目描述 现有N(2 ≤ N ≤ 100000)盏灯排成一排,从左到右依次编号为:1,2,......,N。然后依次执行M(1 ≤ M ≤ 100000)项操作,操作分为两种:第一种操作指定一个区间[a, b],然后改变编号在这个区间内的灯的状态(把开着的灯关上,关着的灯打开),第二种操作是指定一个
阅读全文
摘要:题目描述 地平线(x轴)上有n个矩(lou)形(fang),用三个整数h[i],l[i],r[i]来表示第i个矩形:矩形左下角为(l[i],0),右上角为(r[i],h[i])。地平线高度为0。在轮廓线长度最小的前提下,从左到右输出轮廓线。 下图为样例2 输入输出格式 输入格式: 第一行一个整数n,
阅读全文

浙公网安备 33010602011771号