maximum median

思维题,从中间往后面扫。因为没有考虑K特别大的情况WA了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

#include <cassert>
#include <iostream>
#include <vector>
using namespace std;

long long A[200005];
int () {

long long N, K;
cin >> N >> K;

for (int i = 1; i <= N;i++)
cin >> A[i];

sort(A+1,A+1+N);
int mid = (N+1) / 2;
long long current = A[mid];

for (int i = mid + 1; i <= N; i++) {
long long dis = A[i] - A[mid];
if(K>=(i - mid) * dis)
{
K -= (i - mid) * dis;
current += dis;
// cout<<"------------"<<current<<endl;
A[mid] += dis;
}
else
{
current += K / (i-mid);
K %= (i-mid);
break;
}
}
if(K) current += K/(N-mid+1);
cout << current << 'n';
}