2025.02.25 CW 模拟赛 B. 大根堆
B. 大根堆
思路
考虑倒着插入每个节点以满足大根堆的性质, 那么最开始我们只有一个位置可供插入. 如果当前插入的点不一定是叶子结点, 那么可供插入的位置就会多一个; 如果其一定是叶子结点, 那么可供插入的位置就会少一个, 乘起来即可.
void init() {
scanf("%d %d", &n, &sz);
for (int i = 1, x; i <= sz; ++i) {
scanf("%d", &x);
f[x] = true;
}
}
void calculate() {
int ans = 1, tmp = 1;
for (int i = n; i; --i) {
ans = 1ll * ans * (tmp++) % mod;
if (f[i]) tmp -= 2;
}
printf("%d", ans);
}

浙公网安备 33010602011771号