线段

230928 做题记录 // 超级 NB 线段树

最近特别喜欢用 NB 这个词。这是为什么呢? 因为我太 NB 了。我怎么这么厉害呢?我好想朝所有人都嘚瑟嘚瑟!我真 NB! 先开题吧。 A - 等差子序列 https://vjudge.net/contest/583230#problem/A 非常 NB 的一道线段树!但是现在没空所以先不写。 B ......
线段 230928 NB

线段树分治&可撤销并查集

可撤销并查集 按时间顺序用一个栈维护合并信息,撤销时从栈顶弹出合并信息,恢复原状态。 并查集查找祖先时 不能路径压缩,只能按秩合并。 例题: [ABC302Ex] Ball Collector 容易想到将 \(A_i\) 和 \(B_i\) 之间连边。 遍历整棵树,用可撤销并查集维护图。 为了进一步 ......
线段 amp

树状数组和线段树

今天太幸运了!硬啃把模板啃下来! 树状数组 解决的本质问题 树状数组解决的本质问题只有一个: 单点改动、区间求值 其他的问题,都是可以转化到该问题上的。 代码板子重点操作 lowbit操作 int lowbit(int x){ return x & -x;} add添加一个值操作 void add( ......
线段 数组

根据一个数组,创建一个Segment Tree(线段树)

线段树的特点 线段树的优势 线段树的构造过程 线段树的基本数据结构(结点结构由五个分量组成) 运行结果 (C语言代码)递归的创建一颗线段树,然后中序、先序、后序遍历这个结点 #include <stdio.h> #include <stdlib.h> #include <stdbool.h> typ ......
线段 数组 Segment Tree

扫描线面积并的牛子线段树

利用到的是,一条线段,只会出现两次。 那么,显然两次在线段树上遍历的节点是一样的,因此,我们可以直接修改定义,\(sum[cur]\) 表示线段树上的节点被多少条线段遍历到了,如果 \(sum[cur]>0\),显然 \(cur\) 的贡献即区间长度,否则呢?否则,我们不需要考虑更大的区间,因为更大 ......
扫描线 线段 面积

线段树复习

1.楼房重建 经典题。先转化题意,将斜率转化为每个点的权值,发现答案是单调递增的。那么就是求单点修改的最长上升子序列。 用线段树维护两个信息当前区间的最大值 mx,当前区间最长上升子序列长度 len。 修改时单点修改即可,考虑如何合并两个区间的 len。可以在线段树上二分。get(o, k) 维护当 ......
线段

2023湖南省赛 E.ytree (线段树)

传送门 大致思路: 1. 将操作1拆分为两个部分x(-1)^d + kd*(-1)d。对于操作1中的x*(-1)d部分而言。我们可以对式子进行拆分,把x拆出来,我们会发现和v号点距离为奇数的点会减去x,为偶数的点会加上x,所以我们可以在线段树上用一个sum1维护应该减去的值,sum2维护加上的值即可 ......
线段 ytree 2023

李超线段树

李超线段树 概念 李超线段树是巨佬李超发明的一种可以求函数定点最值的线段树,又名李超树。代码简短,思想简明,用途广泛。 问题 李超线段树是用来解决类似于这种问题 题目传送门 要求在平面直角坐标系下维护两个操作: 在平面上加入一条线段。记第 \(i\) 条被插入的线段的标号为 \(i\)。 给定一个数 ......
线段

广义李超线段树

前言: 1.本篇文章为李超线段树的扩展,不会的可以去[这里](https://www.luogu.com.cn/problem/P4097 "这里") 这是我的模板: struct LCT { int tot=0,rt=0; struct Tree{int lc,rc,id;}tr[M]; ll A ......
线段 广义

代码风格规范(线段树2)

教授要求规范代码风格,具体要求如下: 引用库命令和库名称之间加空格 例如 #include <cstdio> 运算符号两侧要加空格 例如 int a = 9 + 6; 大括号换不换行均可(但我倾向换行) 例如 for(int i = 0 ; i < N ; i ++) { // do somethi ......
线段 风格 代码

<学习笔记>线段树分治

一种离线处理方法 可以处理“具体哪个修改对询问有影响”、可以贡献不独立、可以支持插入删除。 例题 对这道题来说,对修改开线段树,线段树上每个节点开一个 \(vector\) 来维护出现在这段区间的线段,加入一个线段的区间,直接在区间查询时对所包含的节点压入这条线段就可以。 然后从根节点递归,先左子树 ......
线段 笔记 lt gt

线段树合并的复杂度

线段树合并的时间复杂度是 \(O(m\log n)\) 的(\(m\) 为插入次数)。 int mer(int x,int y){ if(!x||!y)return x^y; t[x]+=t[y]; return L[x]=mer(L[x],L[y]),R[x]=mer(R[x],R[y]),x; ......
复杂度 线段

【线段树合并、虚树】P5327 [ZJOI2019] 语言

终于 1k AC 了家人,感动吧。 贺了很久,很累。 前置题目:P3320 [SDOI2015] 寻宝游戏 虚树的边权和: \[\sum dep_{a_x} - \sum_{x < n} dep_{a_x, a_{x + 1}} - dep_{a_{1}, a_{n}} \]考虑转化贡献,求过该点的 ......
线段 语言 P5327 5327 2019

可持久化非确定状态AC自动分块维护线段平衡仙人掌优化最小费用最大流预处理混合图上莫比乌斯反演莫队带花舞蹈链并查集树状数组套主席树预处理动态DP分治FFT求多项式逆元对数函数的指数函数用可持久化并查集合并最小费用循环流上插头DP

P8946 The Lost Symbol 这种类型的 dp 的特点就是大部分转移形如 \(f(i,j)\rightarrow f(i+1,j+1)\) 之类的,并且当以上转移出现时原数组被清空,这就可以用一个 deque 来维护,然后对于全局赋值/全局加,需要对每个位置维护一个时间戳,并记录上一次 ......
函数 费用 多项式 线段 对数

线段树,合并!

线段树,合并! 是啥 合并两颗动态开点线段树。 比方说我要合并两颗维护区间和的线段树,那么我就这样写: int merge(int x,int y,int s,int t){ if(!x||!y)return x|y; if(s==t){ tr[x].val+=tr[y].val; return x ......
线段

线段树

线段树,一种非常通用的数据结构,多用于区间查询问题,虽然在时间和空间效率上都不如树状数组,但是因为其维护和操作更简单而受oier青睐 为了加深记忆 特此写篇博客 大佬轻喷 线段树,是一颗完全二叉树,由上到下维护,支持询问,更改等多种操作变种包括可持久化线段树及若干,本篇博客只提最简单的普通线段树,支 ......
线段

6426: 区间操作2 线段树/区间加/区间乘/区间查询

描述 给定长度为N(N<=105)的数列A,然后输入M行操作指令。 第一类指令形如“C l r d”,表示把数列中第l~r个数都加d。 第二类指令形如“M l r d”,表示把数列中第l~r个数都乘d。 第三类指令形如“Q l r”,表示询问数列中第l~r个数的和。 对于每个询问,输出一个整数表示答 ......
区间 线段 6426

线段树【区间求和】

#include<bits/stdc++.h> #define maxn 500005 using namespace std; int n,m; int a[maxn]; struct node{ int l,r,sum; }; node tr[4*maxn]; void build(int l, ......
线段 区间

6574: 最大数 线段树/单点加/求区间最大值

描述 给定一个正整数数列 a1,a2,a3,⋯,an ,每一个数都在 0~p–1 之间。可以对这列数进行两种操作: 添加操作:向序列后添加一个数,序列长度变成 n+1; 询问操作:询问这个序列中最后 L 个数中最大的数是多少。 程序运行的最开始,整数序列为空。写一个程序,读入操作的序列,并输出询问操 ......
线段 最大值 区间 6574

线段树的一种简单实现

发现之前没有整理过线段树的代码,填一下坑。 ``` int Array[maxn]; class SegmentTree{ public: SegmentTree* BuildTree(const int L,const int R){ SegmentTree *Node=new SegmentTr ......
线段

线段树

树状数组是个好东西,写起来也相对好看。但是操作比较局限,区间修改就掉回$O(nlogn)$, 那还不如 $O(n)$。线段树完美的解决问题。 线段树,也可以理解的一堆线段组成的树。 ![](https://cdn.luogu.com.cn/upload/image_hosting/q5vd2ura. ......
线段

线段树模板

区间修改/区间查询 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e5+10,inf = 0x3f3f3f3f; int n,m,a[N],add[N * 4]; ll sum[N ......
线段 模板

[CSP-S 2022] 策略游戏(线段树代码)

# [[CSP-S 2022] 策略游戏]( https://www.luogu.com.cn/problem/P8818) ## 题意: 给定两个序列A,B。每次先从A序列规定区间内取出一个数,再从B序列规定区间内取一个数,答案为两数乘积。A希望答案尽可能大,B希望答案尽可能小。 ## 思路: # ......
线段 策略 代码 CSP-S 2022

线段树进阶

## 普通线段树 核心在于上传标记(pushup)和下传标记(pushdown)以及懒标记的设计。 [**P3373 【模板】线段树 2**](https://www.luogu.com.cn/problem/P3373) 维护一个加法标记和乘法标记。 下传标记时,将乘法标记更新加法标记。 标记下传 ......
线段

Codeforces Round 406 (Div. 2) D. Legacy 线段树优化建图

[传送门](https://codeforces.com/problemset/problem/786/B) 题目大意: **给定n个点,m个操作,和起点s。其中n 和 q 大于等于1小于等于1e5, s大于等于1小于等于n** **其中m个操作有三种情况:** 1.输入1 u v val 表示从u ......
线段 Codeforces Legacy Round 406

Memory题解(线段树优化DP)

[传送门](https://www.luogu.com.cn/problem/P9594) 简要题意: 给定 $m$ 条线段,每条线段由四个正整数参数 $l_i,r_i,c_i,w_i$ 描述,其中 $l_i,r_i$ 是这条线段的端点,$c_i$ 是这条线段的种类,$w_i$ 是这条线段的权值。 ......
线段 题解 Memory

高级算法指北——李超线段树及其应用

## I 走进李超线段树 ### 定义 李超线段树是一种用于维护多条一次函数的线段树。你可以使用它在 $O(\log n)$ 的复杂度内插入一条新的直线,或是查询所有直线 $y=k_ix+b_i$ 中,当 $x=x_0$ 时,$y$ 的最值。 李超线段树上的每个节点都维护当前区间的中点处,$y$ 的 ......
线段 算法

普通线段树

## [P3373 【模板】线段树 2](https://www.luogu.com.cn/problem/P3373) 题目要求支持区间加,区间乘,所以就打两个 $lazy\_tag$ ,然后 $push\_down$ 的时候先乘后加即可。 然后注意乘法的 $lazy\_tag$ 初始值为 $1$ ......
线段

吉司机线段树

## 一、区间历史最值 以区间历史最大值为例。首先,相应地,设 $maxb$ 表示一个节点的区间历史最大值。为了更新一个区间的子区间,再设一个 $tag2$ ,表示 $tag1$ 从上次 $push\_down$ 以后到现在达到过的最大值。 $code:$ ```cpp void push_up(i ......
线段 司机

李超线段树学习笔记

# 李超线段树学习笔记 ## [P4097 【模板】李超线段树 / [HEOI2013] Segment](https://www.luogu.com.cn/problem/P4097) ### 题意 要求在平面直角坐标系下维护两个操作: 1. 在平面上加入一条线段。记第 $i$ 条被插入的线段的标 ......
线段 笔记