![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线段树
ssl_yty
这个作者很懒,什么都没留下…
展开
-
【gmoj】【线段树】矮人排队
暴力想法就是判断编号A~B的小矮人位置最大值减最小值是否等于B-A。想到查询位置时可以用线段树优化。但是时间复杂度达到O(NM)原创 2022-08-04 19:58:15 · 64 阅读 · 0 评论 -
【ybtoj 高效进阶 4.4】【线段树】 取模问题
【ybtoj 高效进阶 4.4】【线段树】 取模问题题目解题思路单点修改以及区间求和是基本知识就不讲了取模的话,假如当前区间的最大值小于模数,那就不用往下了如果不是就继续往下走,到叶子节点时取模代码#include<iostream>#include<cstdio>using namespace std;int n,m,x,y,z,q;long long sum[1000100],ma[1000100];void add(int w,int k,int原创 2021-12-18 17:01:38 · 168 阅读 · 0 评论 -
【gmoj】【线段数】 【并查集】 graph
【gmoj】【线段数】 【并查集】 graph题目解题思路因为有减边的操作所以我们可以将每条边按存在的时间丢进线段树中维护用按秩并查集维护边二分图如果存在奇环就不成立如果一条边的两端不在同一集合就合并,放进栈中如果在同一集合且是奇环就直接输出NO小小优化,如果当前已经是奇环,那可以不用往下了,输出 l~r 的NO跑完后要弹出栈代码#include<iostream>#include<cstdio>using namespace std;const原创 2021-08-14 17:01:48 · 85 阅读 · 0 评论 -
【洛谷 P2590】 【树剖】 树的统计
【洛谷 P2590】 【树剖】 树的统计题目解题思路树剖模板题用与查询树上连续区间的算法分为三大步记录父节点,重儿子,深度void dfs1(ll x,ll fa){ f[x]=fa,size[x]=1; //fa记录父节点,size记录子树大小(含自己) dep[x]=dep[fa]+1; //深度 for (ll i=head[x];i;i=h[i].next) if (h[i].to!=fa) { dfs1(h[i].t原创 2021-07-22 16:30:26 · 106 阅读 · 0 评论 -
[ybtoj 高效进阶 4.4] [线段树] 小白逛公园
[ybtoj 高效进阶 4.4] [线段树] 小白逛公园题目解题思路因为是在区间中找一段连续的不一定要取完要维护的是最大子段和以及区间和最大子段和可以看作左端最大子段和以及右端子段和中取其一别的与单点修改,区间求和一样代码#include<iostream>#include<cstdio>using namespace std;int k,x,y,n,m,a[500010];struct lzf{ int s,l,r,maxx;}sum[50000原创 2021-07-11 19:26:54 · 109 阅读 · 0 评论 -
[ybtoj 高效进阶 4.4] [线段树] 区间修改
[ybtoj 高效进阶 4.4] [线段树] 区间修改题目解题思路区间修改用懒标记传递修改的信息如果当前被修改区间被完全包括就累加区间长度*v并打上懒标记以便传递区间累计当前区间被完全包括直接返回值否则分两段统计代码#include<iostream>#include<cstdio>using namespace std;int n,m,l,r,v,w,a[5000100],d[5000100];long long sum[5000100];v原创 2021-07-11 18:21:44 · 74 阅读 · 0 评论 -
【ybtoj 高效进阶 4.4】【线段树】 求区间和
【ybtoj 高效进阶 4.4】【线段树】 求区间和题目解题思路板子题代码#include<iostream>#include<cstdio>#include<cmath>using namespace std;int n,m,w,x,y,l,r;long long sum[400010];void add(int k,int l,int r,int x,int y) //单点修改{ if (l==r) { sum[k]+原创 2021-07-09 17:04:09 · 95 阅读 · 0 评论 -
线段树练习三 题解
线段树练习三 题解线段树练习三题目给定一条长度为mmm的线段,有nnn个操作,每个操作有3个数字xxx,yyy,zzz表示把区间[xxx,yyy]染成颜色zzz,询问染完色之后,这条长度为mmm的线段一共有几种颜色。规定:线段的颜色可以相同。连续的相同颜色被视作一段。问xxx轴被分成多少段。样例input20 //四条,总长度为2010 19 12 9 25 13 315 17 4output7样例解释数据规模NNN <= 10000MMM <= 10原创 2020-08-09 21:20:12 · 66 阅读 · 0 评论 -
线段树练习二 题解
线段树练习二 题解线段树练习二题目桌子上零散地放着若干个不同颜色的盒子,桌子的后方是一堵墙。如右图所示。问从桌子前方可以看到多少个盒子?假设人站得足够远(输入时,由底向上,从左到右)。样例input16 //桌子长度5 // 盒子数量4 712 141 56 1011 16output4数据范围1<=nnn<=100000,1<=mmm<=100000,保证坐标范围为[1,nnn].代码#include<iostream>原创 2020-08-09 19:51:48 · 160 阅读 · 0 评论 -
线段树练习一 题解
线段树练习一 题解线段树练习一题目桌子上零散地放着若干个盒子,桌子的后方是一堵墙。如右图所示。现在从桌子的前方射来一束平行光, 把盒子的影子投射到了墙上。问影子的总宽度是多少?样例input20 //桌面总宽度4 //盒子数量1 53 87 1013 19output15数据范围1<=nnn<=100000,1<=mmm<=100000,保证坐标范围为[1,nnn].代码#include<iostream>#inclu原创 2020-08-09 19:12:02 · 142 阅读 · 0 评论 -
线段树练习五 题解
线段树练习五 题解线段树练习五题目一行N个方格,开始每个格子里的数都是0。现在动态地提出一些问题和修改:提问的形式是求某一个特定的子区间[a,b]中所有元素的和;修改的规则是指定某一个格子x,加上或者减去一个特定的值A。现在要求你能对每个提问作出正确的回答。1≤N≤100000,提问和修改的总数可能达到100000条。样例input20 //方格个数6 //有几组操作M 1 1 //表示修改,第一个表示格子位置,第二个数表示在原来的基础上加上的数,M 2 2M 3 4M 3 -5M原创 2020-08-09 18:24:22 · 118 阅读 · 0 评论 -
线段树练习四 题解
线段树练习四 题解线段图练习四题目在平面内有一条长度为n的线段(不计入答案),可以对进行以下2种操作:1、把从x到y的再加一条线段2、查询从x到x+1有多少条线段输入第一行输入n,m第2~m+1行,每行2个数x,y,表示从x到y再加一条线段最后一行输入2个数,为x和x+1,查询x到x+1的线段数目输出输出x到x+1的线段数目样例input7 22 53 64 5output2解题思路构建一棵树边输入边覆盖统计输入的区间的子节点的和代码#inclu原创 2020-07-22 16:13:42 · 77 阅读 · 0 评论