尺取法
文章平均质量分 52
尺取法
Jozky86
这个作者很懒,什么都没留下…
展开
-
cf1555 E. Boring Segments
cf1555 E. Boring Segments题意:给你n个线段,最大点是m,每一个线段有一个权值w,你能选择线段来覆盖1-m这个区间的,选择的代价为最大权值和最小权值的差。问你最小的的代价是多少。题解:尺取+线段树我们尺取的选择线段,然后用线段树来判断此时区间是否被完全覆盖,如何判断呢?我们可以认为一开始整个线段树都是0,每加入一个线段,这个区间的值+1,当tr[1].sum!=0时,即所有点都被覆盖。注意:本题中的覆盖是覆盖所有边,比如线段[1,5]和线段[6,10]并没有将[1,10]原创 2021-08-18 15:32:04 · 181 阅读 · 0 评论 -
King of Range
King of Range题意:给你n个数,有m个询问,每次询问一个x,问有多少个区间的最大值减最小值大于x题解:我一开始的想法st表实现区间最大减最小,利用二分来找这个区间范围,复杂度O(nmlogn),正好被卡一个签到题给做复杂了我们这样想,我们定义左端i,然后去移动右端点pos,当出现pos大于k时,此时pos位置之后的肯定与l组成的区间也大于k,然后左端点移动(i++),右端点在pos继续走(pos不清零),为什么?结合代码分析:我们每次记录答案都是当区间差值刚好大于k时退出,也就原创 2021-07-31 22:21:48 · 193 阅读 · 0 评论 -
CodeForces - 616D Longest k-Good Segment
CodeForces - 616D Longest k-Good Segment题意:有包含n个数的序列a,求能找到最长的区间包含不超过k个不同的元素。题解:尺取法,先固定L,然后移动R,R每次移动,当超过k后,L再移动代码:#include<bits/stdc++.h>#define debug(a,b) printf("%s = %d\n",a,b);typedef long long ll;using namespace std;inline int read(){原创 2021-06-04 00:29:31 · 148 阅读 · 0 评论