vector<int> minimalHeaviestSetA(vector<int> arr){
// sort the array arr[] in descending order
sort(arr.begin(),arr.end(),greater<int>());
// create array A, sum variable S and Sa
vector<int> A;
int S = 0, Sa = 0;
// store the sum of elements in S
for(int i=0;i<arr.size();i++) S+=arr[i];
int i = 0;
while(i<arr.size() && Sa <= S - Sa){
Sa += arr[i];
A.push_back(arr[i]);
i++;
}
// finally return A in increasing order (reverse it)
reverse(A.begin(),A.end());
return A;
}