class Solution {
public:
int findBestValue(vector<int>& arr, int target) {
int N = arr.size();
sort(arr.begin(),arr.end());
int ans = 1;
int diff = abs(ans*N-target);
if( diff == 0 ) return ans;
int sum = 0;
int loc = 0;
for(int i=0;i<N;i++){
loc = arr[i];
int Rdiff = sum + loc*(N-i) - target;
if(Rdiff == 0) return loc;
if(Rdiff > 0){
int a = (target-sum) % (N-i);
int b = (target-sum) / (N-i);
if(a > (N-i)/2) return b+1;
else return b;
}
sum += loc;
}
return loc;
}
};