
线段树
gigo_64
莫看,莫看,这不是真实的我(七海脸)
溜了溜了
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
csp 模拟 八云蓝【计数】【线段树】
传送门 其实跟线段树没什么关系。 对于这道题,我们发现直接计数复杂度很大。比起对于每个询问,计算有多少个区间被调用,不如对于每个区间,计算有哪些询问调用了它。 对于一个询问,我们直接上线段树。然后接下来大力分类讨论。 1.不相交 不相交还做个鬼,直接跳过。 2.相交但不覆盖 对于一个相交但不覆盖,不容斥的话,分左右两种。容斥的话,就用总区间数减去不相交数。 我选择的不容斥(很难写,...原创 2019-11-11 20:54:04 · 206 阅读 · 0 评论 -
NOI模拟 黑白划分【线段树】【容斥】
传送门 题目本质是求非同色正方形且边长为2的幂的个数。 这个2的幂条件简直给线段树量身定做。 cnt(i)即边长为2^i的同色正方形个数。纯色总数减去同色个数*4(因为有4的贡献被去掉了)就是异色贡献。 最多一百万行列,我们分边长来考虑。 对于边长为2^i的正方形,很明显其由一条长为2^i的横边和一条长为2^i的纵边围成,任何两条这样的边可以成为一个这样的正方形。 所以我们分横纵分...原创 2019-11-06 21:33:04 · 178 阅读 · 0 评论 -
[HNOI/AHOI2018]转盘【线段树】【单调栈】
传送门 一旦我走到的点已经出现,我就打标记。问最小时间。 我们发现,如果要靠走两圈或者更多圈来得到的点,和一开始在起点等很久再出发得到的答案是等价的。 比如说走了很多圈经过点数分别为1,8,19,23,555 完全可以变成551,552,553,554,555 所以问题转化成了只走一圈。 首先拆掉环复制一遍变成一条链。 我们需要枚举起点,得到答案的式子是这样的 即通过每一个点的...原创 2019-11-04 14:30:14 · 237 阅读 · 0 评论 -
【洛谷4198】楼房重建【线段树】【单调】
传送门~ 单点修改,维护从左看到的斜率升序序列长度。 每个楼房的高度除以距离得到斜率。 所以看出这道题需要动态维护一个单调上升序列。 考虑区间合并。记录区间答案长度以及区间最大值。 很明显左区间仍然可以被看到。而右区间不一定。 右区间能别看到的,只有右区间合法答案中,比左区间最大值还大的部分。 考虑在右区间上二分。因为右区间维护的也是一个单调栈,所以可以二分。 如果到叶子节点,判断...原创 2019-11-04 11:19:43 · 202 阅读 · 0 评论 -
【HNOI2012】永无乡【线段树合并】【并查集】
传送门 其实很裸,用并查集维护每个点的信息已经别合并到哪个线段树里面了,然后权值线段树查第k大就行。 我一开始和naive地没用并查集,然后发现rt没有传递性。 写着写着反应过来,,其实一开始也可以这么写,,用rt当并查集用就行,,我感觉更naive了。 #include<bits/stdc++.h> using namespace std; #define in read(...原创 2019-10-29 21:39:26 · 114 阅读 · 0 评论 -
[AHOI2014/JSOI2014]奇怪的计算器【线段树】
传送门 真tm好题。 区间加减,区间乘,区间假加,区间覆盖。 每个线段树结点对应我们需要求的一个初始代入值下标。 为了简单我们把询问的东西sort。 维护一个函数:(k1,k2,k3)=k1*c1+k2*a+k3;这样就可以应对四个操作。 如此,直接怼。可以说是下传标记好题。 #include<bits/stdc++.h> using namespace std; #d...原创 2019-10-28 22:15:18 · 234 阅读 · 0 评论 -
【bzoj3693】圆桌会议【hall定理】【线段树】
传送门 对于圆环问题,先复制一遍转区间。 对于一个区间,这个区间包含的所有a的和,肯定要小于等于座位数和。这是hall定理(当然生活常识也知道凳子至少要比人多) 对于任意一个区间都要如此。 因为是包含,所以我们只需要管端点是问题的l,r端点就可以。 也就是说对于任何 转换一下就是 这样就是一个可以按顺序维护的东西了。线段树维护sum+L-1,我们按右端点sort,然后依次查询。 ...原创 2019-10-28 16:25:46 · 318 阅读 · 0 评论 -
【NOIP2017】列队【动态开点线段树】【思维分析】
传送门 主要就是一个很良好的思维,一点一点分析我们需要干什么,维护什么,怎么维护。 干什么 删掉一个点,直接删是不现实的,因为后面都要挪回来。所以我们打个标记。 打了标记后查询就改成查第k个存在的数。 但最后一列非常特殊。这一列每次都要删掉一个数然后加入一个数。所以我们单独维护最后一列。 对于最后一列同样查询第k个存在的数,但是插入什么数需要讨论。如果是原矩阵就直接插,如果不是就只能把...原创 2019-10-23 09:34:55 · 130 阅读 · 0 评论 -
【poj2374】Fence Obstacle Course【dp】【线段树】
传送门 首先是个很经典的那什么弹球下坠动规。分左右两种情况讨论即可。 重点在于如何处理每个点下落接住它的栅栏。 通过线段树从下往上处理求最大值即可。 然后乱搞。 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> using namespace std...原创 2019-10-21 19:16:44 · 184 阅读 · 0 评论 -
线段树合并
有时候不得不合并两个形态不一定完全相同(因为动态开点)的线段树,往往是权值线段树。我们可以直接merge起来。大体跟可并堆的或者非旋treap的节奏差不多。 如果某个子树不存在该节点直接返回,存在logn递归。 为什么动态开点呢。因为很显然,如果两个线段树结构相同,那复杂度还是O(n)。所以结构越混乱,复杂度越低。 事实上,复杂度均摊nlogn。 bzoj4756 奶牛qwq #in...原创 2019-10-09 19:06:18 · 114 阅读 · 0 评论 -
【TJOI2018】数学计算【线段树】
长点儿见识,,咕咕咕 一开始很蒙蔽啊这题怎么做啊高精吗卧槽我不会救命啊 然后再一想,我先把数存下来。 然后再一想,把这个数删了等于*x/x=1 然后再一想,我需要一个动态更新维护全局的数据结构。那是啥呢 那是线段树啊 所以如果存在就是这个数,不存在就是1,辣鸡单点修改,连单点查询都不用写直接查根。 3min写完感觉手速又提高了呢ouo #include<bits/stdc+...原创 2019-10-04 16:50:01 · 165 阅读 · 2 评论