QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#30447 | #3857. Single-track railway | whereismyteammate# | WA | 2ms | 11776kb | C++20 | 1.1kb | 2022-04-28 18:43:44 | 2022-04-28 18:43:45 |
Judging History
answer
#include <bits/stdc++.h>
const int N = 2e6 + 50;
int n, k;
int64_t t[N], a[N], sum;
inline int lowbit(int x) {
return x & -x;
}
void add(int p, int v) {
++p;
for (; p < N; p += lowbit(p))
t[p] += v;
}
int64_t query(int p) {
++p;
int64_t r = 0;
for (; p; p -= lowbit(p))
r += t[p];
return r;
}
int64_t solve() {
// find such k that minimize max(sum[1..k], sum[k+1]..n)
if (n == 1) {
return 0;
}
int l = 0, r = n, ans = -1;
while (l <= r) {
const int mid = l + r >> 1;
int v = query(mid);
if (v > sum - v) {
r = mid - 1;
}
else {
ans = mid;
l = mid + 1;
}
}
assert(ans != -1);
int64_t v = query(ans);
assert((sum - v) >= v);
return (sum - v) - v;
}
int main() {
std::cin >> n;
--n;
for (int i = 1; i <= n; ++i) {
std::cin >> a[i];
sum += a[i];
add(i, a[i]);
}
int m;
std::cin >> m;
std::cout << solve() << '\n';
while (m--) {
int j, v;
std::cin >> j >> v;
sum -= a[j];
add(j, -a[j]);
a[j] = v;
sum += a[j];
add(j, a[j]);
std::cout << solve() << '\n';
}
return 0;
}
详细
Test #1:
score: 0
Wrong Answer
time: 2ms
memory: 11776kb
input:
2 39 7 1 20 1 70 1 56 1 37 1 37 1 37 1 91
output:
0 0 0 0 0 0 0 0
result:
wrong answer 1st lines differ - expected: '39', found: '0'