#193. 「2019冬令营提高组」堆

但是每个点都遍历一遍,有些点的子树完全相同却重复算了

忽然记起完全二叉树的性质之一:每个非叶节点的子树中至少有一个是满二叉树

那么我们预处理满二叉树的那一块,剩下的dfs就可以辣

求阶乘.......分块打表

设打表分成$k$段,则复杂度$O(logn+n/k)$

#include<cstdio>
const int mod=1e9+,W=1e7;
const int tab[]={,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,};
int n,f[],ans;
inline int Pow(int x,int y){
int re=;
for(;y;y>>=,x=1ll*x*x%mod)
if(y&) re=1ll*re*x%mod;
return re;
}
int dfs(int x){
int i=;
while((<<i)-<x) ++i;
if((<<i)-==x) return f[i];
if(x+(<<(i-))<=(<<i)-) return 1ll*Pow(x,mod-)*f[i-]%mod*dfs(x-(<<(i-)))%mod;
else return 1ll*Pow(x,mod-)*f[i-]%mod*dfs(x-(<<(i-)))%mod;
}
int main(){
freopen("heap.in","r",stdin);
freopen("heap.out","w",stdout);
scanf("%d",&n); f[]=;
for(int i=;i<=;++i) f[i]=1ll*f[i-]*f[i-]%mod*Pow((<<i)-,mod-)%mod;
ans=tab[(n-)/W];
for(int i=(n-)/W*W+;i<=n;++i) ans=1ll*ans*i%mod;
ans=1ll*ans*dfs(n)%mod;
printf("%d",ans);
return ;
}

fjwc2019 D6T1 堆(组合数+打表)的更多相关文章

  1. Chosen by god【组合数打表】

    Chosen by god 题目链接(点击) Everyone knows there is a computer game names "hearth stone", recen ...

  2. Trie、并查集、堆、Hash表学习过程以及遇到的问题

    Trie.并查集.堆.Hash表: Trie 快速存储和查找字符串集合 字符类型统一,将单词在最后一个字母结束的位置上打上标记 练习题:Trie字符串统计 import java.util.*; pu ...

  3. 魔法效果——dijkstra+堆(邻接表存储)

    dijkstra本身每次要for一遍,才能找出最小的节点,但用了堆之后,直接取出堆首就可以了. 但要注意的一点是,c++自带的stl里的priority_queue本身是先入大出的,而我们要求的是最小 ...

  4. Dijkstra堆优化+邻接表

    Dijkstra算法是个不错的算法,但是在优化前时间复杂度太高了,为O(nm). 在经过堆优化后(具体实现用的c++ STL的priority_queue),时间复杂度为O((m+n) log n), ...

  5. [翻译] 聚集索引表 VS 堆表

    前言: 本文对这篇博客Clustered Tables vs Heap Tables 的翻译, 如有翻译不对或不好的地方,敬请指出,大家一起学习进步. 问题描述 创建一个新表时,一个非常重要的设计原则 ...

  6. Bzoj 2006: [NOI2010]超级钢琴 堆,ST表

    2006: [NOI2010]超级钢琴 Time Limit: 20 Sec  Memory Limit: 552 MBSubmit: 2222  Solved: 1082[Submit][Statu ...

  7. Windows编程中的堆管理(过于底层,一般不用关心)

    摘要: 本文主要对Windows内存管理中的堆管理技术进行讨论,并简要介绍了堆的创建.内存块的分配与再分配.堆的撤销以及new和delete操作符的使用等内容. 关键词: 堆:堆管理 1 引言 在大多 ...

  8. python数据结构之堆(heap)

    本篇学习内容为堆的性质.python实现插入与删除操作.堆复杂度表.python内置方法生成堆. 区分堆(heap)与栈(stack):堆与二叉树有关,像一堆金字塔型泥沙:而栈像一个直立垃圾桶,一列下 ...

  9. 一种快速统计SQL Server每个表行数的方法

    转载自:http://www.cnblogs.com/kenyang/archive/2013/04/09/3011447.html 我们都知道用聚合函数count()可以统计表的行数.如果需要统计数 ...

随机推荐

  1. centos7 下 apache nginx squid https正向代理 代理服务器

    apache yum install httpd mod_ssl -y vim /etc/httpd/conf.d/ssl.conf Listen https <VirtualHost *:&g ...

  2. HTTPS流程

    我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取.所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议. HTTPS简介 HTTPS其实是有两部分组成:HTTP + SSL ...

  3. SecureCRT乱码问题的解决

    == 安装后默认的设置是utf8,不是汉字乱码,是一块一块的看不清,OMG... 设置这两个页面就好了

  4. 23-Python3 File

    ''' file(文件)方法 ''' #open()对象 pass #file对象 ##file.close():关闭文件,关闭后不能再进行读写操作 fo1 = open('/Users/ligaij ...

  5. [Java] Create File with java.io.File class

    Create a file with some content in some specific location. The reference is here. /** * Write fileCo ...

  6. nodejs 模块moment格式化时间,获取当前时间的前一天时间

    var moment = require('moment'); moment.locale('zh-cn'); var today = {}; var _today = moment(); today ...

  7. np.percentile()

    np.percentile(a, q, axis=None, out=None, overwrite_input=False, interpolation='linear', keepdims=Fal ...

  8. MySQL数据类型--与MySQL零距离接触2-13MySQL唯一约束

    虽然字段可以为空值,但是如果存储多个空值,如何确保唯一性?其实只会存储一个空值. 提示错误:Tom已经存储过,所以唯一约束在起作用. 一张表中:主键约束只能有一个,唯一约束可以有多个.在创建索引的时候 ...

  9. [xdoj]1299&1300朱神的烦恼 朱神的序列

    http://acm.xidian.edu.cn/problem.php?id=1299 1.第一道题简单的很,数据范围最多只有1e4,对于数组中的每一个元素进行两个for循环,i=0;i<n; ...

  10. iOS 开发笔记-加载/初始化

    ViewDidLoad 一般我们会在这里做界面上的初始化操作,比如往view中添加一些子视图.从数据库或者网络加载模型数据装配到子视图中 在自定义控制里 initWithFrame:一般用于添加控件, ...