2025.02.25 CW 模拟赛 B. 大根堆

B. 大根堆

思路

考虑倒着插入每个节点以满足大根堆的性质, 那么最开始我们只有一个位置可供插入. 如果当前插入的点不一定是叶子结点, 那么可供插入的位置就会多一个; 如果其一定是叶子结点, 那么可供插入的位置就会少一个, 乘起来即可.

复制代码
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
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 @   Steven1013  阅读(0)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开