CF1132B Discounts 题解

Content

有一个长度为 \(n\) 的数组 \(a_1,a_2,a_3,...,a_n\)。有 \(q\) 次询问,每次询问给定一个数 \(x\)。对于每次询问,求出数组中去掉一个第 \(x\) 大的数字后数组内剩余的数字的总和。

数据范围:\(2\leqslant n\leqslant 3\times 10^5,1\leqslant a_i\leqslant 10^9,1\leqslant m<n,2\leqslant q_i\leqslant n\)

Solution

预处理出所有数的总和,直接排序之后每次询问就可以直接输出总和减去第 \(x\) 大的数后的值了,就是我们要求的剩余的数字的总和。

Code

int n, a[300007], q;
ll sum;

bool cmp(int a, int b) {
	return a > b;
}

int main() {
	getint(n);
	_for(i, 1, n) {getint(a[i]); sum += a[i];}
	sort(a + 1, a + n + 1, cmp);
	getint(q);
	while(q--) {
		int x;
		getint(x);
		ll ans = sum - a[x];
		writell(ans), putchar('\n');
	}
	return 0;
}
posted @ 2021-12-17 14:29  Eason_AC  阅读(54)  评论(0)    收藏  举报