随笔分类 -  数据结构——线段树

摘要:二分答案mid,将>=mid的设为1,<mid的设为0,这样排序就变成了区间修改的操作,维护一下区间和即可 然后询问第q个位置的值,为1说明>=mid,以上 时间复杂度O(nlog2n) tips: 线段树操作区间[l,r]需满足l<=r,要特判;tag可能为0,要初始化为-1 Code 阅读全文
posted @ 2018-07-27 16:53 void_f 阅读(176) 评论(0) 推荐(0)
摘要:构造一个序列B[i]=-b[i],建一颗线段树,维护区间max, 每次区间加后再询问该区间最大值,如果为0就在树状数组中对应的值+1(该操作可能进行多次) 答案在树状数组中找 其实只用一颗线段树也是可以的 Code 阅读全文
posted @ 2018-07-26 15:34 void_f 阅读(138) 评论(0) 推荐(0)
摘要:Description 约翰带着奶牛去都市观光。在落日的余晖里,他们看到了一幢接一幢的摩天高楼的轮廓在地平线上形成美丽的图案。以地平线为 X 轴,每幢高楼的轮廓是一个位于地平线上的矩形,彼此间可能有重叠的部分。奶牛一共看到了 N 幢高楼,第 i 幢楼的高度是 Hi,两条边界轮廓在地平线上的坐标是Ai 阅读全文
posted @ 2018-04-12 17:28 void_f 阅读(351) 评论(0) 推荐(0)
摘要:Description "题目链接" Solution 可以想到,每次肯定是拿最大价值为最优 考虑改变树上一个点的值,只会影响它的子树,也就是dfs序上的一个区间, 于是可以以dfs序建线段树,这样就变成区间问题了 Code c++ include include define MID int mi 阅读全文
posted @ 2018-03-30 15:15 void_f 阅读(230) 评论(0) 推荐(0)