浮点数三分
#include<bits/stdc++.h>
using namespace std;
vector<double>v;
//下界,上届
double lim_mi,lim_mx;
double work(double x){
return x;
}
void solve(){
double l=lim_mi,r=lim_mx;
//暴力100次逼近答案;
for(int i=1;i<=100;i++){
double m1=(r-l)/3+l;
double m2=(r-l)/3*2+l;
//左半递增,右半递减
if(work(m1)<work(m2))
l=m1;
else
r=m2;
}
cout<<work(l)<<endl;
}
int main(){
ios::sync_with_stdio(false);
solve();
}
整数三分
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll lim_mi,lim_mx;
ll calc(ll x){
return x;
}
void solve(){
ll l=lim_mi,r=lim_mx;
//l+2是最小范围,可以调整l+3或者更大一些
while(l+2<r){
ll m1=(r-l)/3+l;
ll m2=(r-l)/3*2+l;
//左半递增,右半递减
if(calc(m1)<calc(m2))
l=m1;
else
r=m2;
}
ll ans=calc(l);
for(int i=l+1;i<=r;i++){
ans=max(ans,calc(i));
}
cout<<ans<<endl;
}
int main(){
ios::sync_with_stdio(false);
solve();
}