线段

【CSP 202303-4】星际网络Ⅱ 【离散化+线段树】

#### 题目链接 http://118.190.20.162/view.page?gpid=T162 #### 题意 一个网络地址由 $n$ ($n \leq 512$ ,且是16的倍数)位二进制位组成(形如 xxxx:xxxx: .... :xxxx),有若干用户需要申请一些网络地址。 有三种操 ......
线段 星际 202303 网络 CSP

CF1824D LuoTianyi and the Function【线段树】

给定长为 $n$ 的数组 $a$,如下定义 $g(i,j)$:当 $i \leq j$ 时,$g(i,j)$ 是满足 $\{ a_p : i \leq p \leq j \} \subseteq \{a_q : x \leq q \leq j\}$ 的最大整数 $x$。否则 $g(i,j) = 0$ ......
线段 LuoTianyi Function 1824D 1824

线段树学习笔记

让我们来一步一步理解! 1.向上更新 void push_up(int rt){//向上更新 sum[rt] = sum[rt << 1] + sum[rt << 1 | 1]; } 2.向下更新 void push_down(int rt, int m){ if(add[rt]){//若有标记,则 ......
线段 笔记

线段树水题

[THUSCH2017] 大魔法师 ​ 给定 $n$ 个三元组 $(A,B,C)$ 。共有 $m$ 种区间操作,分为三大类,七小类。 1.$A_i=A_i+B_i$ 2.$B_i=B_i+C_i$ 3.$C_i=C_i+A_i$ 给定值 $v$ 4. $A_i=A_i+v$ 5. $B_i=B_i\ ......
线段

Codeforces Round 767 (Div. 1) E. Groceries in Meteor Town (Kruskal重构树 + 线段树)

传送门 ** 出现最大路径权值就应该联想到克鲁斯卡尔重构树,我们对于克鲁斯卡尔重构树求一遍dfs序,维护所有白色点的最大最小dfn(包括出发点),求出最大最小dfn的最近公共祖先既是答案。注意需要特判一下除了本身以外没有白色点情况。** #include <bits/stdc++.h> int n, ......
线段 Codeforces Groceries Kruskal Meteor

可持续化线段树

可持续化线段树 前言: “这个数据结构是属于比较抽象的一类。并且代码实现比较繁琐复杂。” 别人都这么说,我却觉得挺好理解、也挺好写的(可能是因为我曾经与多道线段树毒瘤题抗争多次)。 为了避免以后我突然脑子抽了不记得了,可以拿出来看看。所以写下这篇笔记,希望也能帮到大家。 建议:带上一个清晰的脑子(草 ......
线段

学习笔记:线段树

在已经掌握线段树的基本用法后的做题整理。给自己复习用的。 用 $mid$ 表示 $(l+r)/2$,$u$ 表示当前区间节点(父区间),$ls,rs$ 分别表示当前区间的左、右子区间节点。 普通维护序列 P2023 [AHOI2009] 维护序列 修改:区间加,区间乘;询问:区间求和。 双倍经验:P ......
线段 笔记

P3919 【模板】可持久化线段树 1(可持久化数组) 题解

一、题目描述: 维护这样的一个长度为 $n$ 的数组,支持以下两种操作 $1$:在某个历史版本上修改某一个位置上的值 $2$:访问某个历史版本上的某一位置的值 每进行一次操作,就会生成一个新的版本(对于操作2,生成的就是一个完全一样的版本)。 版本编号即为当前操作的编号(从 $1$ 开始编号,版本 ......
线段 题解 数组 模板 P3919

线段树选记

1. [TJOI2018]数学计算 题目描述 小豆现在有一个数 $x$,初始值为 $1$。小豆有 $Q$ 次操作,操作有两种类型: 1 m:将 $x$ 变为 $x \times m$,并输出 $x \bmod M$ 2 pos:将 $x$ 变为 $x$ 除以第 $pos$ 次操作所乘的数(保证第 $ ......
线段

线段树/树状数组————离散化操作

#include<bits/stdc++.h> using namespace std; typedef long long ll; #define endl "\n" const int N = 1e5 + 5; vector<int>vec; struct BIT { int c[N]; voi ......
线段 数组

可持久化线段树

可持久化数据结构 (Persistent data structure) 总是可以保留每一个历史版本,并且支持操作的不可变特性 (immutable)。主席树全称是可持久化权值线段树,给定 nn 个整数构成的序列 aa,将对于指定的闭区间 [l,r][l,r] 查询其区间内的第 kk 小值。 可持久 ......
线段

「学习笔记」可持久化线段树

可持久化数据结构 (Persistent data structure) 总是可以保留每一个历史版本,并且支持操作的不可变特性 (immutable)。 主席树全称是可持久化权值线段树,给定 $n$ 个整数构成的序列 $a$,将对于指定的闭区间 $\left[l, r\right]$ 查询其区间内的 ......
线段 笔记

Chemistry Experiment Codeforces Round 247 (Div. 2) 线段树动态开点,二分

第一次写的时候还不会线段树的动态开点,写了一个是线段树但是是$O(N^2)$的写法,现在用动态开点武装了自己,会了正解$O(qlog n^2)$。首先建立一个权值线段树,但这里的权值很大,通过动态开点去建树来节省空间,对于两种操作: 操作1,常见的动态开点的单点修改 操作2,二分答案,然后在线段树上 ......

吉老师线段树学习笔记(内含吉老师ppt)

Segment tree beats 吉老师线段树 Segment tree Beats!.pdf_免费高速下载|百度网盘-分享无限制 (baidu.com) 为广大oier们提供学习ppt(笑) ==历史最大值未完工== 作用 用于维护区间最值和区间历史最值的线段树 区间最值 引入 问题 给定一个 ......
老师 线段 笔记 ppt

线段树合并/分裂

你说的对,但是你理应会动态开点线段树是什么东西。 合并很简单,两棵线段树一块搜,然后逐个节点合并。 分裂的话可以按照 FHQ Treap 的方法。假如我们将前 $k$ 小和后边分开成 $x,y$,首先看左子树,如果比 $k$ 大那右子树给 $y$,递归左子树,反之左子树给 $x$,递归右子树。 真没 ......
线段

线段树

线段树又称区间树, 是一种基于分治思想的二叉树结构, 每个节点代表一段区间 线段树的每个节点代表一个区间 对于每个内部节点 [l,r] , 它的左儿子是 [l,mid] , 右儿子是 [mid+1,r] 用一维数组存整棵树 $$ 对于编号为x的节点 \begin{cases} 父节点: [\dfra ......
线段

区间不同数的个数 二维数点 扫描线 可持久化线段树

二维数点,对于询问的$[l, r]$区间我们只需要统计有多少个数上一次出现的位置$pos$ 满足$pos \leq l$,即可。 template<class T> struct BIT { T c[N]; int size; void resize(int s) { size = s;} T qu ......
扫描线 线段 区间 个数

可持久化线段树模板 区间第k小数,区间前k大数之和

第K小数 // AC one more times #include <bits/stdc++.h> using namespace std; #define fi first #define se second #define pb push_back #define endl '\n' #def ......
区间 线段 大数 之和 小数

权值线段树模板

【模板】普通平衡树 // AC one more times #include <bits/stdc++.h> using namespace std; #define fi first #define se second #define pb push_back #define endl '\n' ......
线段 模板

线段树

1.基础算法 1.1快读快写 template <typename T> inline void read(T& t) {​ int f = 0, c = getchar(); t = 0; ​ while (!isdigit(c)) f |= c == '-', c = getchar();​ w ......
线段

线段树的动态开点模板

学习自 数据结构学习笔记(5)动态开点线段树 动态开点线段树 感谢大佬们博客的帮助 // AC one more times #include <bits/stdc++.h> using namespace std; #define fi first #define se second #defin ......
线段 模板 动态

CF960F Pathwalks | 线段树优化DP

题目 设$dp[x,w]$为以结点$x$为结尾,且最后一条边边权为$w$的最长路径长度。 考虑根据顺序加边,对于边$(u,v)$,更新 $$ dp[v,w] = \max_{w' < w}{dp[u,w']} + 1 $$ 对于每个节点,建一棵线段树,维护$dp[x]$,这样每次更新$dp[v,w] ......
线段 Pathwalks 960F 960 CF

线段树

1 #include<iostream> 2 #include<string> 3 #define ll long long 4 const int N = 1e5 + 5; 5 6 using namespace std; 7 8 ll tree[N<<2]; // 线段树,可以是对应的结构体 9 ......
线段

[Week 18] 每日一题(C++,动态规划,线段树,数学)

[Daimayuan] T1 最长公共子序列(C++,DP,二分) 给出从 $1$ 到 $n$ 的两个排列 $P_1$ 和 $P_2$,求它们的最长公共子序列。 输入格式 第一行是一个正整数 $n$。 接下来两行,每行为 $n$ 个数,为自然数 $1,2,…,n$ 的一个排列。 输出格式 一个数,即 ......
线段 数学 动态 Week 18

CF1797E 线段树 + 倍增 题解

Preface 有趣的一道 ds,赛后不看题解做出来了。 Solution 首先有一个性质:$\varphi(x)$ 经过 $\mathcal{O}(\log x)$ 次迭代后变为 $1$。 证明: 若 $x$ 为奇数,$\varphi(x)=x\sum_{i=1}^{k}\frac{p_i-1}{ ......
线段 题解 1797E 1797 CF

线段树相关学习

扫描线 扫描线是一种用于图形上,常被用来解决图形面积、图形周长和二维数点等问题。 扫描线求图形面积 【模板】扫描线 因为图形并不是一个规整的矩形,不方便直接算。很容易就能想到,把这个图形拆成若干个矩形,怎么实现这个过程呢,这时候就需要用到扫描线了。 假设现在有一根线从下往上扫 可以发现若矩形的长出现 ......
线段

ARC159F Good Division【性质,DP,线段树】

定义一个序列是好的当且仅当其可以通过每次删去一对相邻的不同的数把序列删空。 给定一个长度为 $2n$ 的序列 $a$,求有多少种划分方式使得每一段都是好的。答案对 $998244353$ 取模。 $n \leq 5 \times 10^5$,时限 $\text{5.0s}$。 先考虑什么样的数列是合 ......
线段 Division 性质 159F Good

Codeforces Round 850 (Div. 2, based on VK Cup 2022 - Final Round) E. Monsters (hard version) 线段树二分

传送门 详细题解传送门 ** 抄的ygg代码,向在这里说一下刚开始没看懂的部分。** ** 求答案的时候是把所有的当前为止的所有数值加起来减去一个从1开始并且公差为1的等差数列的前size项和。其中size是当前最多能用到哪个位置,满足前size项能构成1,2,3,....,sz这样的形式。** * ......
线段 Round Codeforces Monsters version

xor (牛客多校) (线性基+ 线段树)

思路: 问xor起来有没有某个值, 想到线性基 然后发现问L-R区间的集合都要表示x, 利用线性基的交集解决 在利用线段树解决区间问题 #include <iostream> using namespace std; typedef unsigned int ui; const int maxn = ......
线段 线性 xor

洛谷P5494 【模板】线段树分裂

传送门 ** 需要的前置知识:线段树合并。** #include <iostream> #include <algorithm> #include <cstring> #include <set> #include <map> #include <deque> #include <vector> t ......
线段 模板 P5494 5494