#include<iostream>
using namespace std;
const int MAXN = 10000;
int arr_hero[MAXN];
int arr_magic[MAXN];
#include<algorithm>
bool cmp(int x, int y) {
return x < y;
}
int main() {
int n, m;
cin >> n;
int temp;
int total = 0;
int i;
for (i = 0; i<n; i++)
{
cin >> temp;
arr_hero[i] = temp;
total += temp;
}
std::sort(arr_hero, arr_hero + n, cmp);
cin >> m;
int hero_max = arr_hero[n-1];
int dragon_attack, dragon_defense;
int magicwater;
for (int i = 0; i < m; i++)
{
magicwater = 0;
cin >> dragon_defense >> dragon_attack;
if (dragon_defense > hero_max) {
magicwater += (dragon_defense - hero_max);
arr_magic[i] = magicwater;
if (dragon_attack > total - hero_max) {
magicwater += dragon_attack - (total - hero_max);
arr_magic[i] = magicwater;
}
}
else {
int begin = 0, end = n - 1, mid{};
while (begin <= end)
{
mid = (begin + end) / 2;
if (arr_hero[mid] == dragon_defense) {
break;
}
else if (arr_hero[mid] > dragon_defense) {
end = mid - 1;
}
else {
begin = begin + 1;
}
}
int attack_hero = arr_hero[mid];
if (attack_hero > dragon_defense) {
if (mid - 1 >= 0) {
int dx_left = dragon_defense - arr_hero[mid - 1];
int dx_right = attack_hero - dragon_defense;
if (dx_left < dx_right) {
attack_hero = arr_hero[mid - 1];
}
}
}
else if (attack_hero < dragon_defense) {
if (mid + 1 < n) {
int dx_left = dragon_defense - attack_hero;
int dx_right = arr_hero[mid + 1] - dragon_defense;
if (dx_right < dx_left) {
attack_hero = arr_hero[mid + 1];
}
}
}
if (dragon_defense >= attack_hero) {
magicwater += (dragon_defense - attack_hero);
arr_magic[i] = magicwater;
if (dragon_attack > total - attack_hero) {
magicwater += dragon_attack - (total - attack_hero);
arr_magic[i] = magicwater;
}
}
else {
if (dragon_attack > total - attack_hero) {
magicwater += dragon_attack - (total - attack_hero);
arr_magic[i] = magicwater;
}
}
}
}
for (i = 0; i < m; i++)
{
cout << arr_magic[i] << endl;
}
system("pause");
return 0;
}
上述代码出现段错误,在oj平台运行不了,但是我能在vs上运行出来