区间重叠问题不需要处理
查看原帖
区间重叠问题不需要处理
668776
Turgen楼主2024/10/9 15:21

证明:SET容器里一旦出现相同的值就必定最小值是00

​ 假设这两个区间分别是区间A和区间B,一共有三种情况。

​ 情况一:区间A包含了区间B,例如A=a[3,5],B=a[4,5]A=a[3,5],B=a[4,5] ,由于元素非负,这种情况是不可能的。

​ 情况二:区间A与区间B没有重叠部分,例如A=a[1,5],B=a[6,9]A=a[1,5],B=a[6,9] ,这种情况显然直接符合答案要求。

​ 情况三:区间A与区间B有部分是重叠的

​ 我们假设区间AAa[L,R]a[L,R]BBa[K,R]a[K,R'] ,其中K[L,R]K∈[L,R],那说明[K,R][K,R'] 部分是重叠的。

​ 我们设AA 的区间和是aa ,B的区间和是bb ,重叠部分的和是kk

​ 那由于a=ba=b ,则说明ak=bka-k=b-k ,那就说明去掉重叠部分,他们的和也是一样的,就说明就算把重叠部分去掉的两个子区间也是相同的,则最小值必定是00

​ 例如5,2,3,6,15,2,3,6,1 ,即便[5,2,3],[3,6,1][5,2,3],[3,6,1] 有重叠部分,那去掉一样的值,他们的和还是一样的。

​ 即[5,2],[6,1][5,2],[6,1] 也是符合答案的。

​ 说明一旦出现相同的值,就必定最小值是00

证明:重叠区间不会影响答案决策。

​ 假设两次选取的区间分别是区间A和区间B

​ 如果区间A和区间B是其本身,即A=[L,R],B=[L,R]\mathrm{A=[L,R],B=[L,R]} ,寻找第一个大于xx 的整数等价于寻找第一个大于等于x+1x+1 的正整数,或者通过erase\mathrm{erase} 函数消去本值,由于前面证明每个数值只会存在一次,所以无需担心删除或者不考虑带来的后效性,为效率可以考虑前者。

​ 如果区间A和区间B属于子区间关系,例如A=a[3,10],B=a[4,6]A=a[3,10],B=a[4,6] ,此时AA 区间包含了BB ,他们的差值就是ABA-B 所剩下区间的和,那既然他剩下的是ABA-B ,那说明我可以选择ABA-B 这个区间,再选择另一个区间,这样结果肯定比ABA-B 要小。至少可以选择[AB],[B左端点不在重叠区间的第一个元素][A-B],[B左端点不在重叠区间的第一个元素]所以子区间不会影响答案。

例如A=1,2,3,4,5,B=[3,4,5]A=1,2,3,4,5,B=[3,4,5] ,他们的差值是AB=[1,2,3]=6A-B=[1,2,3]=6 ,那我直接选择[1,2,3],[4][1,2,3],[4] 进行比较,得到的结果必然比没减去[4][4] 还要少。

如果区间A和区间B有部分重叠关系,即上面的第三个情况,同样的道理,那他们的差值就是AA 区间和BB 区间各自不交界的地方,那既然这样,直接选择这两个区间进行相减得到绝对值,必定比AB区间加起来还要小,所以也不会影响答案。

​ 例如有数组a[]={1,2,3,4,5},A=[1,2,3],B=[3,4,5]a[]=\{1,2,3,4,5\},A=[1,2,3],B=[3,4,5] ,那得到的结果必然是[1,2,4,5][1,2,4,5] 之和,那我直接选择[1,2],[4,5][1,2],[4,5] 两个分区间进行相减,必然比[1,2,4,5][1,2,4,5] 相加的结果要小。

2024/10/9 15:21
加载中...