1. 程式人生 > >【三分查詢求單峰函式的最值】 ZOJ 3386 Trick or Treat

【三分查詢求單峰函式的最值】 ZOJ 3386 Trick or Treat

         題目大意是:在一個平面上有N個點,每個點的座標已經給出,現在要求在X軸上找一個點,使得這個點到所有點中最大的距離最小。

         分析:我們設這個點為X0,所求的距離為F(x),那麼對於所有的 X < X0 和 X > X0 都有F(x) > ans,即實際上這個函式是已X0為最小值,兩邊

都是單調遞增或者遞減的,因此我們可以三分查詢找出這個最值的座標。總複雜度O(n*logn).

         PS:這是第一次寫三分,之前竟然從沒寫過Orz...

相關推薦

查詢函式 ZOJ 3386 Trick or Treat

         題目大意是:在一個平面上有N個點,每個點的座標已經給出,現在要求在X軸上找一個點,使得這個點到所有點中最大的距離最小。          分析:我們設這個點為X0,所求的距離為F(x),那麼對於所有的 X < X0 和 X > X0 都有F(x)

#法判斷函式#附加例題LA 5009

在白書上學到的有趣的知識。 單峰函式 即 先嚴格遞增再嚴格遞減 或 先遞減再遞增的函式 三分法: 取區間[L,R]兩個三分點m1,m2. 比較兩處的函式值,縮小範圍,繼續三分直到找出優解。 如下圖所示: 這是一個下凸的函式,我們要找最小值

函式極值

模板,注意精度一般為1e-6,1e-8跟1e-10用的較少。double three_devide(double l, double r) { double left = l, right = r,mid,midmid; while(left + esp &

(谷)函式極值

what is 三分法 對於二分,相信你一定十分熟悉。就是在一個具有單調性序列上查詢你所需要的數字。由於其單調性,你每一次在查詢是就可以將規模縮小一半,大致就是: 1.假設這個數列單調遞增 2.維護一個區間左端點\(l\),區間右端點r和中間點\(mid\) 3.如果\(mid\)比想要的值小,則左邊肯定

YT14-HDU-查詢F(x)的

Problem Description Now, here is a fuction:   F(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 <= x <=100) Can you find the minimum value wh

二分法函式

#include <iostream> #include <boost/timer/timer.hpp> #include <ctime> #include <set> using namespace boost::timer

zoj 3386 Trick or Treat x軸上一點到各點的中的 點到線段距離

Trick or Treat -------------------------------------------------------------------------------- Time Limit: 5 Seconds      Memory Limit: 6

演算法設計與資料結構法:函式的極值

介紹 三分法的思路與二分法很類似,不過其用途沒有那麼廣泛,主要用於求單峰函式的極值。 示例程式碼 void Solve() { double left, right, m1, m2,

2018-3-23論文一種新型智慧演算法--狼群演算法(筆記)實驗分析,多,可和不可函式

表中“U”表示此函式為單峰函式(Unimodal):也就是函式在定義域中只有一個全域性最優解,沒有區域性最優解(區域性極值)“M”為多峰函式(Multimodal):擁有多個區域性極值(是隻有一個全域性最優解??)易陷入區域性最優解以及產生區域性震盪“S”為可分函式(Sepa

codeforces 617E XOR and Favorite Number莫隊多次查詢區間[l,r]中區間異或等於k的子區間個數

【連結】 【題意】 給定一個數組,多次查詢,問區間l,r中有多少個子區間滿足區間異或為k 【思路】 查詢很大,意味著每次回答的時間複雜度不能太大。對於本題,我們可以維護一個字首異或,sum[i],區間[a,b]異或為k等價於sum[a-1]^sum[b]=k,假如

/函式先減後增/先增後減 Strange fuction HDU基礎04二分法

Problem DescriptionNow, here is a fuction:  F(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 <= x <=100)Can you find the minimum value when x

POJ - 3737 R - UmBasketella

POJ - 3737  R - UmBasketella  In recent days, people always design new things with multifunction. For instance, you can not only use cell

入門HDU - 4717 Q - The Moving Points

Q - The Moving Points  HDU - 4717 There are N points in total. Every point moves in certain direction and certain speed. We want to know a

貪心TCO2016R1B SettingShield

題意: 分析: 很顯然,以第一種方式的使用次數為自變數,以第二種方式的使用次數為因變數,一定是一個不上升函式。 換言之,已知f(x)為不下降函式,通過神奇的證明發現:f(x)+x為單谷函式。 所以。。。三分就行了第一種方式的使用次數就行了。。 求總方案可以用貪心的思想

演算法優化(1):基礎知識-凸集,函式,擬凸函式與凸函式函式凹凸性定義

本文筆記介紹我最近學習的演算法優化的基礎知識,有: 最優化問題的一般形式 約束問題的分類及形式 優化問題的分類 單峰函式(Unimodal function)的定義 擬凸函式(Quasiconvex function)的定義

演算法 —(解決凸凹函式

我們都知道 二分查詢 適用於單調函式中逼近求解某點的值。 如果遇到凸性或凹形函式時,可以用三分查詢求那個凸點或凹點。 下面的方法應該是三分查詢的一個變形。 如圖所示,已知左右端點L、R,要求找到白點的位置。 思路:通過不斷縮小 [L,R] 的範圍,無限逼近白點

查詢-二分查詢查詢

二分查詢的查詢過程是: 每輪與有序區間的中間元素進行比較,若相等則返回當前元素位置。若被查詢元素大於中間元素,則到右側區間查詢,若查詢元素小於中間元素,則到左側區間查詢。 不斷重複前序查詢過程,或者待查詢區間失效。 輸入:表的長度,表中各個元素。要查詢的表元素。 輸出

二分與查詢模板

可參考https://wenku.baidu.com/view/3f0805820740be1e650e9a8c.html 二分查詢 a[] 是有序的 成升序或降序 int find(int a[])//假定是在0到100之間搜尋 l取最左邊 r 取最右邊

查詢的時間複雜度分析

       在網上搜索了一下有關三分查詢時間複雜度分析的。有人說是O(3log3(n)),但是實驗中三分比二分更耗時,所以他們就認為不能迷信時間複雜度。我現在糾正一下(僅個人分析,供網友參考):    1.二分查詢的時間複雜度:因為每次都是折半,可以構造一顆遞迴樹,共lo

查詢演算法之查詢

三、具體實現  const double EPS = 1e-10; double calc(double x) { // f(x) = -(x-3)^2 + 2; return -(x-3.0)*(x-3.0) + 2; } double ternary