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...