
线段树
lalalzo
Acmer 加油
展开
-
Educational Codeforces Round 112 E.Boring Segments-线段树+双指针
https://codeforces.com/contest/1555/problem/E 这场的e好像比较简单。 题目大意,给你n个线段,最大点是m,每一个线段有一个权值w,你能选择线段来覆盖1-m这个区间的,选择的代价为最大权值和最小权值的差。问你最小的的代价是多少。 思路:先把线段按照权值排序,使用双指针来维护每一个线段i能选择最左边能合法的一段区间,那么a[j].sum-a[i].sum就是从i开始最小的答案了,检查是否合法可以用线段树来维护最小值,最小值不等于0 那就说明所以点都被覆盖了。原创 2021-07-31 01:36:26 · 250 阅读 · 0 评论 -
2021牛客第四场-E Tree Xor-线段树区间异或
https://ac.nowcoder.com/acm/contest/11255/E 题目大意:有n个点,每一点有一个区间[l,r]范围的权值可能,有n-1条边,边上的权值为w,w=w(u)^w(v),问你满足权值范围和边权值的方案数。 思路:我们把树根的值设为0,这样其他点的w值也随之确定,然后树根的值变为a,那么其他点的值也会变为w^a。根据这个性质,那我们只要求出a的范围就好了,即所有的区间异或对应的w值,就可以求出a的范围,再求出所有点a的范围的交集。对于区间异或上w值,我们可以使用线段.原创 2021-07-28 04:17:47 · 759 阅读 · 0 评论 -
牛客练习赛73 D 离别(线段树+右端点排序离线查询)
牛客练习赛73 D 离别 思路: 对于每一个固定的右端点i,我们都找到一个区间(l,r)使得区间中的点为左端点时 里面最大的的种数为k。 这个可以用队列或者vector来维护。 然后我们对于q个查询,安装r从小到大排序。 开始遍历,把now点更新到q.r点,每次更新l【now】-r【now】这个区间的数都加1,使得 从1到r 点 做为右端点的(l,r)区间 全部更新,然后我们查询(q.l,q.r)中的区间和是多少 就是答案了。 因为当 右端点 i<q.l 的时候,他更新的(l,r) 区间必然是小于q原创 2021-04-14 01:32:36 · 76 阅读 · 0 评论 -
线段树——思维(Codeforces 339D Xenia and Bit Operations/Billboard HDU - 2795)
Codeforces 339D Xenia and Bit Operations vj地址 题意:给出2的n次方个数,每次将现在这个序列中相邻的两个数运算后合并为一个数,得到一个新的序列,这个新序列的长度是上一个序列长度-1,当新序列长度为1时停止运算,奇数次操作进行OR运算,偶数次操作进行XOR运算, 现在有m个询问,每次询问会改变上一个序列中的一个值,问新序列运算后的值为多少 思路:他合并的路...原创 2020-09-29 13:58:04 · 99 阅读 · 0 评论