QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#30447#3857. Single-track railwaywhereismyteammate#WA 2ms11776kbC++201.1kb2022-04-28 18:43:442022-04-28 18:43:45

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-04-28 18:43:45]
  • 评测
  • 测评结果:WA
  • 用时:2ms
  • 内存:11776kb
  • [2022-04-28 18:43:44]
  • 提交

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'