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;
}

浙公网安备 33010602011771号