线段树
蓝丶星灬
这个作者很懒,什么都没留下…
展开
-
D-Integers Have Friends [ Codeforces Round #736 (Div. 2) ] 线段树 滑动窗口
链接:https://codeforces.com/contest/1549/problem/D 有大坑,当n等于1时无法构造b数组,线段树l=1,r=0,会出问题 必须特判掉1 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=2e5+10; ll t[maxn*4]; ll a[maxn]; ll b[maxn]; void pushup(int rt){ t[rt]=_原创 2021-08-17 20:24:34 · 94 阅读 · 0 评论 -
E-Boring Segments [ Educational Codeforces Round 112 (Rated for Div. 2) ] 尺取 线段树
链接:https://codeforces.com/contest/1555/problem/E 题意: 在数轴上给3e5条从l到r权为w的线,要求选择其中一些线,将1 ~ m完全覆盖。 要求输出选择方案中 max与min权值 之差 最小的结果。 题解: 用线段树维护覆盖的区间 设置尺取选中范围l与r 按w从小到大排序,依次将区间加入线段树,也就是r不断右移 如果出现符合条件的情况,就记录当前的大小差值 并且将l持续右移,同时将区间从线段树中移除,直至不符合为止 取大小差值的min即可 过程有点像扫描线(个原创 2021-08-17 16:04:01 · 80 阅读 · 0 评论 -
F-xay loves trees [2021牛客多校7] DFS序 树上滑窗
链接:https://ac.nowcoder.com/acm/contest/11258/F 题意:给两棵树,要求找一个最大点集,满足以下条件。 1.在第一棵树上连续,且任意两点必有一点是另一个的祖先。 2.在第二课树上任意两点都不能是对方的祖先。 输出最大点集元素数 题解: (不是标程,只是觉得这种办法很妙,写个题解记录一下) 用树上滑块做,初始ans=1,令滑块长度为2,如果找到2的答案,更新ans并使滑块长度变为3 整个过程中滑块长度不会减少,所以复杂度每个点只会进出队列一次,复杂度on 先在第二个树原创 2021-08-08 12:52:26 · 142 阅读 · 0 评论 -
H-Hopping Rabbit [ 2021牛客多校6 ] 扫描线
链接:https://ac.nowcoder.com/acm/contest/11257/H 题意: 有1e5个矩形,坐标范围±1e9,现在给出一个点列,横纵坐标间距为d(1e5),要求找到一个固定点,使得所有点都不在矩形内部。 题解: 将所有矩形%d之后,让矩形落到(0,0)到(d,d)的区块,但是有可能有的矩形与(0,0)到(d,d)的区块相交,那就按照相交的线把矩形拆分成2个或者4个。 然后使用扫描线,线段树维护区间最小值,如果扫到一条线上区间最小值为0,则说明这里有空出来的位置,扫一遍这条线,获取到原创 2021-08-03 16:29:53 · 200 阅读 · 0 评论 -
B-找山坡 2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛)
B-找山坡 2021年广东工业大学第十五届文远知行杯程序设计竞赛(同步赛) 母牛哥在电脑面前坐久了,想站起来看看窗外的小山坡,于是就想出了这个问题: 给定一个大小为n的数组a,序号从1开始, 计算: max{ R - L | 1 <= L <= R <= n, a[L] == a[R], 对于所有i (L <= i <= R), 满足a[i] >= a[L] }. 也就是找到两个坐标,这两个坐标的值相等,并且他们之间的值都大于等于这两个坐标上的值. 这两个坐标相减最大能原创 2021-03-29 15:39:32 · 184 阅读 · 0 评论