【模板】三分查找 wannafly挑战赛16 AB序列

题目地址在这里啦

前言

二分查找大家一定都会,不会的话可以看我的这篇博客:二分+dijkstra
具体来说,二分查找的前提是答案满足单调性,大家一定知道什么叫单调性吧!


正文

与大家熟悉的二分查找不同的是,三分查找需要满足查找的函数是一个有最值的函数(凸性函数),而且我们需要查找的就是给定区间上的最值。

我们怎么做三分查找呢?

现在读者可以自己在纸上画一画一个二次函数,如果你想求它的最值,用计算机应该如何求呢?
(当然是从左边往右边暴力了)
现在我们将区间取一个中点mid,将右半部分再取中点midmid,每一次我们考察f(mid)和f(midmid)的大小关系。聪明的读者应该已经发现了,如果我们要求最小值,我们需要不断把区间往小的地方缩,否则往大的地方缩。

值得注意的是,我们三分的三个区间是独立的,所以左边界只能往mid上缩,右边界只能往midmid上缩,这点大家应该很容易理解吧。

然后放一个三分的模板吧:

 long long mid = (l+r)/2;
 long long midmid = (mid+r)/2;
 if(check(mid)>check(midmid)) l = mid;
 else r = midmid;

这个就是一个求最小值的模板啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值