week4 二分 中位數

2021-10-04 03:28:33 字數 1042 閱讀 5816

title:任務內容是,給定乙個 n 個數的陣列 cat[i],並用這個陣列生成乙個新陣列 ans[i]。新陣列定義為對於任意的 i, j 且 i != j,均有 ans = abs(cat[i] - cat[j]),1 <= i < j <= n。試求出這個新陣列的中位數,中位數即為排序之後 (len+1)/2 位置對應的數字,』/』 為下取整。

input:多組輸入,每次輸入乙個 n,表示有 n 個數,之後輸入乙個長度為 n 的序列 cat, cat[i] <= 1e9 , 3 <= n <= 1e5

output:輸出新陣列 ans 的中位數

樣例:

input:

41 3 2 4

31 10 2

output:18

分析

總結:上面寫的注意,直接在二分過程中求名次為len-pos的元素是會出現錯誤的。並且需要注意二分的控制條件和判斷條件,這些都決定了二分演算法是否用得正確。

#include

#include

using

namespace std;

#define range 100010

int n=

0,i=

0,len=

0,pos=0;

int a[range]

;int

finde

(int i,

int number)

else

low=mid+1;

}return ans;

}int

fun()if

(rank<=len-pos)

high=mid;

else

low=mid+1;

}return low-1;

}int

main()

return0;

}

week4作業 B二分

對於這道題,乙個顯然的四重迴圈o n4 的暴力做法顯然會超時,資料量為4e4,於是考慮如下優化 將兩個數列的組合看成一組新數列,那麼我們就可以得到兩個n2的數列,首先對其中乙個數列排序,分別對於乙個數列中的所有元素的相反數,在另一組有序數列中二分找到相應的元素 a b c d b 四個數列 zjm ...

WEEK4 二分和貪心

zjm 有 n 個作業,每個作業都有自己的 ddl,如果 zjm 沒有在 ddl 前做完這個作業,那麼老師會扣掉這個作業的全部平時分。所以 zjm 想知道如何安排做作業的順序,才能盡可能少扣一點分。請你幫幫他吧!輸入包含t個測試用例。輸入的第一行是單個整數t,為測試用例的數量。每個測試用例以乙個正整...

樹狀陣列 二分 中位數之中位數

給出乙個長度為 n 的序列 a 首先求出其所有區間的中位數,將這些中位數構成的集合記為 s 求 s 中所有數的中位數。此題中位數指 有 n 個數,第 left lfloor frac right rfloor 1 個數即為中位數。資料範圍 1 leq n leq 10 5,1 leq a i leq...