給你一些數,然後求這些數相互之間差的絕對值,然後絕對值排序,找到中間那個數。
我反正一直開始是沒有想到這個題竟然可以用二分來做。━━( ̄ー ̄*|||━━.
二分列舉答案,假設列舉值為mid
,然後就是在排好序的序列中對每乙個num[i]
找到在i
之後,有多少個大於num[i]+mid
的數的個數(數列裡的值比num[i]+mid
大,說明該值與num[i]
作差形成的新數列裡的數比中位數mid
大),用lower_bound
計算所有差值比mid
大於等於的組合個數。如果個數之和小於新數列個數的一半,則說明mid
大了。
#include#include#include#include#include#include#include#include#includetypedef long long ll;
using namespace std;
const double esp=1e-6;
const int inf=0x3f3f3f3f;
const int maxn=1e5+7;
ll num[maxn], n, m;
ll solve(ll value)
printf("%d\n", lt-1);
} return 0;
}
二分查詢 POJ3579 Median
給定乙個長度為n的正整數序列a,現有a中的所有元素任意兩兩做差,形成乙個長度為cn2 c n 2 cn2 的序列b,求出b的中位數。其中,1 n 1e5,0直接求出這些差值 排列 選中位數,顯然會超時,其時間複雜度為o n 2 log n 2 其中求值為o n 2 排列為o m log m 二分查詢...
POJ 3579 Median 尺取 二分
給n數字,x1,x2,xn,我們計算每對數字之間的差值 xi xj 1 i j n 我們能得到 c n,2 個差值,現在我們想得到這些差值之間的中位數。如果一共有m個差值且m是偶數,那麼我們規定中位數是第 m 2 小的差值。input輸入包含多測 每個測試點中,第一行有乙個nthen n 表示數字的...
Poj3579Median二分查詢第K大
題目鏈結 題目 給定一組數x ix i xi 我們可以得到c n 2 c n,2 c n,2 個差值 xi xj i x i x j i j xi x j i,問求這些差值組成的數列中第k kk個 k c n,2 2 k c n,2 2 k c n 2 2 是多少。思路比較常見的二分題目。首先對輸入...