7 4 中位數 10分

2021-10-03 03:55:46 字數 876 閱讀 2224

乙個有 n 個整數的陣列 a,n是乙個奇數。

每次可以選擇陣列裡的乙個元素 a​i​​ 並把這個元素加上 1。

在至多 k 次操作之後,陣列的中位數最大能變成多少。

多組輸入

第一行兩個整數 n,k(1≤n≤2×10​5​​,1≤k≤10​9​​)。

第二行 n 和整數 a​1​​,a​2​​,......,a​n​​。

k 次操作後陣列的中位數。

3 2

1 3 5

5
千萬千萬要注意:

多組輸入!!!!!!

超大資料!!!!!!10^9

long long int

思路:先排序後確定中位數

如果想要中位數最大,則中位數<=後面任意乙個數

所以每次使中位數a[h]盡量接近a[h+flag]

如果剩餘的k大於差值,則要使中位數到a[h+flag]之間的數都加上差值

否則,使k/flag,使中間的數均加上k/flag;

#include#include#include#include#includeusing namespace std;

int n;

long long m;

int main()

sort(a,a+n);

long long int h=(n-1)/2;

long long int flag=1;

while(m!=0)

long long int t=a[h+flag]-a[h];

if(m>=t*flag)

else

flag++;

} cout<}

PTA 7 4 中位數 10分

乙個有 n 個整數的陣列 a,n是乙個奇數。每次可以選擇陣列裡的乙個元素 aia ai 並把這個元素加上 1。在至多 k kk 次操作之後,陣列的中位數最大能變成多少。輸入格式 多組輸入 第一行兩個整數 n,k 1 n 2 1 05,1 k 1 09 n,k 1 n 2 10 5,1 k 10 9 ...

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

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

每日演算法 二分,中位數

題目 4.尋找兩個正序陣列的中位數 給定兩個大小為 m 和 n 的正序 從小到大 陣列 nums1 和 nums2。請你找出這兩個正序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1,3 nums2 2 則...