习题-加减
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
long long sum[N], a[N];
signed main(){
long long n, k; cin >> n >> k;
for(int i = 1; i < n; ++i){
cin >> a[i];
}
sort(a, a + n);
for(int i = 1; i <= n; ++i) sum[i] = sum[i-1] + a[i];
int l = 1, r = 2;
long long res = 1;
while(l <= n && r <= n){
int mid = l + r >> 1;
// 计算将区间 [l, r] 内所有元素变为 a[mid] 所需的操作次数
// a[mid] * (mid - l + 1) - (sum[mid] - sum[l - 1]) 计算将区间 [l, mid] 内元素变为 a[mid] 的操作次数
// sum[r] - sum[mid] - a[mid] * (r - mid) 计算将区间 [mid + 1, r] 内元素变为 a[mid] 的操作次数
if(a[mid] * (mid - l + 1) - (sum[mid] - sum[l-1]) + (sum[r] - sum[mid]) - (r - mid) * a[mid] <= k){
res = max(res, r - l + 1ll);
++r;
}else ++l;
}
cout << res << endl;
return 0;
}
`