一維點距的中位數 (分治)

2022-04-28 19:39:09 字數 769 閱讀 9421

這道題其實挺水的,主要是考當我們看到題目要求所有距離的中位數時,我們能否想到答案的單調性進而想到二分答案。(像我這種蒟蒻就想不到)

首先中位數,它是很特殊的乙個數,我們發現如果直接求它複雜度很高有\(o(n^2)\),但是如果我們是判斷乙個數是不是中位數就不一樣了:只要我們排個序,就可以用貪心\(o(n)\)的求出是否剛好有一半的點距小於它,如果小於它的點距沒有一半就說明中位數大於當前這個數,如果小於它的點距超過一半就說明中位數小於當前這個數。

而我們用貪心求小於當前數點距的數目時,因為排過序,直接尺取法即可(就是掃一遍)

#include#include#include#include#include#include#include#include#include#include#include#include#define ll long long

#define db double

#define inf 0x7fffffff

#define rg register int

using namespace std;

int n,m,k,ans;

int a[50005];

inline int qr()

inline bool check(ll x,int k)

return tot>1;

if(check(mid,k))r=mid-1;

else l=mid+1;

}return l;

}int main()

HPU 1470 中位數 分治

時間限制 1 sec 記憶體限制 128 mb 題目描述 ocean有兩個公升序序列a和b,現在他將a和b合併後得到新序列c,他想知道序列c的中位數。輸入 第一行輸入乙個整數t,代表有t組資料。每組資料第一行輸入乙個整數n,代表a b序列元素個數。接下來一行依次輸入n個整數,代表序列a的元素。接下來...

尋找兩個正序陣列的中位數 分治

力扣的困難題極其簡單!給定兩個大小為 m 和 n 的正序 從小到大 陣列 nums1 和 nums2。請你找出並返回這兩個正序陣列的中位數。高階 你能設計乙個時間複雜度為 o log m n 的演算法解決此問題嗎?示例 1 輸入 nums1 1,3 nums2 2 輸出 2.00000 解釋 合併陣...

找兩個有序陣列中的中位數 分治法實驗1

問題描述 設x 0 n 1 和y 0 n 1 為兩個陣列,每個陣列中含有n個已排好序的數。找出x和y的2n個數的中位數。程式設計任務 利用分治策略試設計乙個o log n 時間的演算法求出這2n個數的中位數。資料輸入 由檔案input.txt提供輸入資料。檔案的第1行中有1個正整數n n 200 表...