![](https://img-blog.csdnimg.cn/20190927151117521.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
线段树
线段树
QingQingDE23
这个作者很懒,什么都没留下…
展开
-
AcWing 1277. 维护序列 (线段树 乘除模板)
【代码】AcWing 1277. 维护序列 (线段树 乘除模板)原创 2022-09-16 22:38:22 · 92 阅读 · 0 评论 -
AcWing 247. 亚特兰蒂斯 (线段树 | 扫描线法)
【代码】AcWing 247. 亚特兰蒂斯 (线段树 | 扫描线法)原创 2022-09-16 16:25:31 · 112 阅读 · 0 评论 -
AcWing 243. 一个简单的整数问题2 (线段树 区间修改+求区间和模板)
线段树,区间修改+求区间和模板。原创 2022-09-15 14:47:34 · 88 阅读 · 0 评论 -
AcWing 246. 区间最大公约数
好恶心的一个板子,调了半天。原创 2022-09-12 18:53:32 · 70 阅读 · 0 评论 -
AcWing 245. 你能回答这些问题吗
线段树维护多个信息,因为要找区间内连续子序列最大和,所以要多维护四个信息,分别是前缀和lmax,后缀和rmax,和区间和最大值tmax,还有区间总和sum。原创 2022-09-12 17:15:45 · 100 阅读 · 0 评论 -
AcWing 1275. 最大数 (线段树 单点修改 | 区间查询模板)
需要注意的是query函数和modify函数的mid都是由tr得出的,大区间不变,用大区间去找tr上的区间进行匹配。线段树,单点修改+区间查询最大值板子。原创 2022-09-12 13:09:46 · 85 阅读 · 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 · 173 阅读 · 0 评论 -
AcWing 1270 数列区间最大值 题解 (蓝桥杯 线段树)
注意写代码的时候上下限要定的大一些,避免数据比较夸张,最好直接用long long进行运算原题#include<bits/stdc++.h>using namespace std;#define int long longconst 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 · 1572 阅读 · 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 · 190 阅读 · 0 评论 -
vjudge I Hate It 题解 / 线段树 模板
#include#include#includeusing 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 · 51 阅读 · 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 · 50 阅读 · 0 评论