题意:给一个数组,可以对任意元素进行+1或者-1的操作,操作可以进行k(k<=1e14)次,求整个数组内最大值-最小值最小为多少
题解:二分。先排序,对于某个待检验的答案,只需要假设当前元素为最小值时是否成立以及当前元素为最大值时是否成立即可,其中可以用单调队列维护出当前元素为最小值或最小值时之前的满足条件的元素同时使用一个变量num记录不满足条件元素的个数遍历数组时计算贡献即可
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define debug(x) cout<<#x<<" is "<<x<<endl;
const ll inf=1e18;
const int maxn=1e5+5l;
ll n,k,a[maxn],sum[maxn];
int pos[maxn];
bool check(ll x){
int head=1;
int tail=0;
ll num=0;
ll xx=0;
for(int i=1;i<=n;i