1.4 二分

最佳牛围栏

算法:二分。

我们首先要知道二分的本质,本质是什么?是边界。二分时会出现一端满足,一端不满足的情况,而相交处就是边界,二分就是在找这个边界。

我们考虑二分一个答案,判断在一个长度超过 \(f\) 的区间中的最大平均值。可以通过记录一个最小前缀和来进行判断,前缀和的转移:\(sum_i=sum_{i-1}+cowi-mid,mid\) 为二分的值,具体判断长度可以用两个指针,一个指向 \(f\) 个位置之前记录最小前缀和,另一个记录当前前缀和。

最后我们就可以通过二分找到一个最优答案。

特殊排序

算法:二分。

发现这题的数据大小不具有传递性,所以我们考虑怎么把数插入到最终的答案数组中。

这里注意一下,不具有传递性只有一个影响,就是答案不是唯一解,但对于我们的算法没有影响。

我们考虑二分查找插入的位置,假设数组中已经有排好序的 \(a,b,c,d,e\) 几个元素,我们现在要插入 \(f\),这里二分的位置为 \(c\),如果 \(f>c\) 那么 \(f\)\(c,e\) 之间,否则在 \(a,c\) 之间。

所以我们这样二分查找的复杂度为 \(O(nlog n)\),次数不会超过 \(10^4\),所以是可行的。

posted @ 2024-07-11 21:06  zxh923  阅读(1)  评论(0编辑  收藏  举报