
线段树
线段树
QingQingDE23
这个作者很懒,什么都没留下…
展开
-
AcWing 1277. 维护序列 (线段树 乘除模板)
【代码】AcWing 1277. 维护序列 (线段树 乘除模板)原创 2022-09-16 22:38:22 · 120 阅读 · 0 评论 -
AcWing 247. 亚特兰蒂斯 (线段树 | 扫描线法)
【代码】AcWing 247. 亚特兰蒂斯 (线段树 | 扫描线法)原创 2022-09-16 16:25:31 · 182 阅读 · 0 评论 -
AcWing 243. 一个简单的整数问题2 (线段树 区间修改+求区间和模板)
线段树,区间修改+求区间和模板。原创 2022-09-15 14:47:34 · 152 阅读 · 0 评论 -
AcWing 246. 区间最大公约数
好恶心的一个板子,调了半天。原创 2022-09-12 18:53:32 · 88 阅读 · 0 评论 -
AcWing 245. 你能回答这些问题吗
线段树维护多个信息,因为要找区间内连续子序列最大和,所以要多维护四个信息,分别是前缀和lmax,后缀和rmax,和区间和最大值tmax,还有区间总和sum。原创 2022-09-12 17:15:45 · 131 阅读 · 0 评论 -
AcWing 1275. 最大数 (线段树 单点修改 | 区间查询模板)
需要注意的是query函数和modify函数的mid都是由tr得出的,大区间不变,用大区间去找tr上的区间进行匹配。线段树,单点修改+区间查询最大值板子。原创 2022-09-12 13:09:46 · 111 阅读 · 0 评论 -
AcWing 1228 油漆面积 题解(蓝桥杯 线段树)
算法思想:就是将每个矩形的竖边依附于一条竖线,将这条竖线加入线段树中,并不断遍历这些竖线,利用线段树更新竖线上被矩形覆盖的长度,tr[1]记录的是当前竖线上被覆盖的总长度,len*记录的x之差就是这块矩形的面积,遍历所有竖线之后,就可以得出所有被矩形覆盖的面积 原题 大佬题解 #include<bits/stdc++.h> using namespace std; const int N = 1e4 + 10; struct Segment { int x, y1, y2; //x原创 2022-03-29 11:58:27 · 230 阅读 · 0 评论 -
AcWing 1270 数列区间最大值 题解 (蓝桥杯 线段树)
注意写代码的时候上下限要定的大一些,避免数据比较夸张,最好直接用long long进行运算 原题 #include<bits/stdc++.h> using namespace std; #define int long long const int N = 1e5 + 10; const int INF = 0x3f3f3f3f3f; int n, m; struct Node{ int l, r; int maxn; }tr[N * 4]; int w[N]; void pus原创 2022-03-28 14:05:52 · 1624 阅读 · 0 评论 -
AcWing 1264 线段树解法
线段树的单点修改和区间查询 #include<bits/stdc++.h> using namespace std; const int N = 1e5 + 10; int n, m; int w[N]; struct node{ int l, r; int sum; }tr[N * 4]; void push_up(int u){ tr[u].sum = tr[u << 1].sum + tr[u << 1 | 1].sum; } void buil原创 2022-03-25 21:48:11 · 213 阅读 · 0 评论 -
vjudge I Hate It 题解 / 线段树 模板
#include #include #include using namespace std; const int N = 200010; int a[N], n, m; struct SegmentTree{ int id; int dat; int l,r; }t[N<<2]; int build(int p, int l, int r){ t[p].l = l, t[p].r = r; if(t[p].l == t[r].r ){ t[p].dat = a[l]; return ; } i原创 2021-08-06 18:41:34 · 78 阅读 · 0 评论 -
线段树 零碎模板
//建立线段树所需结构体 struct SegmentTree{ int l, r; int dat;//该节点的区间最大值 int sum;//该节点的区间总和 }t[SIZE*4]; //建立线段树 void build(int p, int l, int r){ t[p].l = l, t[p].r = r; if(l == r){ t[p].date = a[l]; return ; } int mid = (l + r) / 2; build(p2, l, mid); build(p2+1, mi原创 2021-08-06 13:42:29 · 69 阅读 · 0 评论