RT,调了好久都没找到错
#include <cstdio>
#include <cctype>
#include <cstdint>
#include <cstdlib>
#include <array>
#include <limits>
using namespace std;
constexpr int kMaxNum(100000);
array<int64_t, kMaxNum + 5> kCamps;
inline int Read(void);
void Write(int);
int main(void) {
int n(Read()), p2(0);
int64_t loong_qi(0), tiger_qi(0),
min_qi_diff(numeric_limits<int64_t>::max() - 1);
kCamps.fill(0);
for (int i = 1; i < n + 1; ++i)
kCamps[i] = Read();
int m(Read()), p1(Read()), s1(Read()), s2(Read());
kCamps[p1] += s1;
for (int i = 1; i < m; ++i)
loong_qi += (m - i) * kCamps[i];
for (int i = m + 1; i < n + 1; ++i)
tiger_qi += (i - m) * kCamps[i];
for (int i = 1; i < n + 1; ++i) {
int64_t new_loong_qi(loong_qi), new_tiger_qi(tiger_qi);
if (i < m)
new_loong_qi += (m - i) * s2;
else if (m < i)
new_tiger_qi += (i - m) * s2;
int64_t qi_diff(abs(new_loong_qi - new_tiger_qi));
if (qi_diff < min_qi_diff) {
min_qi_diff = qi_diff;
p2 = i;
}
}
Write(p2);
putchar('\n');
return 0;
}
inline int Read(void) {
char ch(getchar());
int num(0);
while (!isdigit(ch))
ch = getchar();
while (isdigit(ch)) {
num = (num << 3) + (num << 1) + (ch ^ 48);
ch = getchar();
}
return num;
}
void Write(int n) {
if (n > 9)
Write(n / 10);
putchar(n % 10 + '0');
}