這道題其實挺水的,主要是考當我們看到題目要求所有距離的中位數時,我們能否想到答案的單調性進而想到二分答案。(像我這種蒟蒻就想不到)
首先中位數,它是很特殊的乙個數,我們發現如果直接求它複雜度很高有\(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 表...