乙個有 n 個整數的陣列 a,n是乙個奇數。
每次可以選擇陣列裡的乙個元素 ai 並把這個元素加上 1。
在至多 k 次操作之後,陣列的中位數最大能變成多少。
多組輸入
第一行兩個整數 n,k(1≤n≤2×105,1≤k≤109)。
第二行 n 和整數 a1,a2,......,an。
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 則...