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);
}
posted @ 2025-02-25 19:27  Steven1013  阅读(14)  评论(0)    收藏  举报