priority_queue的使用,构造大顶堆
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
//比较三个数字的关系
int com(int x, int y, int z){
int temp;
if(x == y == z){
temp = 0;
}
else if(x == y && y != z){
temp = z - y;
}
else if(x != y && y == z){
temp = y - x;
}
else if(x != y && y != z){
temp = abs((z - y) - (y - x));
}
return temp;
}
int main() {
int n;
cin >> n;
priority_queue<int> nums;//大根堆
for(int i = 0; i < n; i++){
int num;
cin >> num;
nums.push(num);
}
while(nums.size() >= 3){
int z = nums.top();
nums.pop();
int y = nums.top();
nums.pop();
int x = nums.top();
nums.pop();
int temp = com(x, y, z);
if(temp!=0){
nums.push(temp);
}
}
if(nums.size() == 0){
cout << 0 << endl;
}
else if(nums.size() == 1){
cout << nums.top() << endl;
}
else{
int temp = nums.top();
nums.pop();
temp = max(temp, nums.top());
cout << temp << endl;
}
}