这莫队太强啦

先推公式S(n,m)表示从C(n, 0) 到 C(n, m)的总和

1.S(n, m)   = S(n, m-1) + C(n, m) 这个直接可以转移得到

2.S(n, m)   = S(n, m+1) - C(n, m+1) 通过变形就可以得到。

3.S(n, m)   = C(n, 0) + C(n, 1) + C(n, 2) + ... + C(n, m)

     = C(n-1, 0) + C(n-1, 0) + C(n-1, 1) + C(n-1, 1) + C(n-1, 2) + ... +C(n-1, m-1) + C(n-1, m)

     = 2S(n-1, m) - C(n-1, m)

4.S(n, m)   = (S(n+1, m) + C(n, m) ) / 2

然后求C(n, m)的时候打表存不下,所以就用C(n, m) = n!/ (m! * (n-m)!)

然后除法部分用逆元保证一下精度就可以了

然后就可以直接套莫队了

  1. #include<map>
  2. #include<set>
  3. #include<ctime>
  4. #include<cmath>
  5. #include<stack>
  6. #include<queue>
  7. #include<string>
  8. #include<vector>
  9. #include<cstdio>
  10. #include<cstdlib>
  11. #include<cstring>
  12. #include<iostream>
  13. #include<algorithm>
  14. #define lowbit(x) (x & (-x))
  15.  
  16. typedef unsigned long long int ull;
  17. typedef long long int ll;
  18. const double pi = 4.0*atan(1.0);
  19. const int inf = 0x3f3f3f3f;
  20. const int maxn = 1e5+;
  21. const int maxm = ;
  22. const int mod = 1e9+;
  23. using namespace std;
  24.  
  25. int n, m, tol, T;
  26. int block;
  27. struct Node {
  28. int l;
  29. int r;
  30. int id;
  31. bool operator < (Node a) const {
  32. return l/block != a.l/block ? l/block < a.l/block : r < a.r;
  33. }
  34. };
  35. Node node[maxn];
  36. ll res[maxn];
  37. ll fac[maxn];
  38. ll inv[maxn];
  39. ll ans;
  40.  
  41. void init() {
  42. ans = ;
  43. memset(res, , sizeof res);
  44. memset(node, , sizeof node);
  45. }
  46.  
  47. ll fa_pow(ll a, ll b) {
  48. ll ans = ;
  49. a %= mod;
  50. while(b) {
  51. if(b & )
  52. ans = ans * a % mod;
  53. a = a * a % mod;
  54. b >>= ;
  55. }
  56. return ans % mod;
  57. }
  58.  
  59. void handle() {
  60. fac[] = ;
  61. inv[] = ;
  62. for(int i=; i<=; i++) {
  63. fac[i] = fac[i-] * i;
  64. fac[i] %= mod;
  65. inv[i] = fa_pow(fac[i], mod-);
  66. }
  67. }
  68.  
  69. ll C(int n1, int m1) {
  70. if(m1 > n1) return ;
  71. ll ans = fac[n1] * inv[m1] % mod * inv[n1-m1] % mod;
  72. return ans;
  73. }
  74.  
  75. int main() {
  76. init();
  77. handle();
  78. scanf("%d", &n);
  79. block = sqrt(n);
  80. for(int i=; i<=n; i++) scanf("%d%d", &node[i].l, &node[i].r), node[i].id = i;
  81. sort(node+, node++n);
  82. int L = ;
  83. int R = ;
  84. for(int i=; i<=n; i++) {
  85. while(L > node[i].l) {
  86. L--;
  87. ans = (ans + C(L, R)) % mod * inv[] % mod;
  88. }
  89. while(L < node[i].l) {
  90. ans = (ans * % mod - C(L, R)) % mod + mod;
  91. ans %= mod;
  92. L++;
  93. }
  94. while(R < node[i].r) {
  95. R++;
  96. ans = (ans + C(L, R)) % mod;
  97. }
  98. while(R > node[i].r) {
  99. ans = (ans - C(L, R) % mod) + mod;
  100. ans %= mod;
  101. R--;
  102. }
  103. res[node[i].id] = ans;
  104. }
  105. for(int i=; i<=n; i++) printf("%I64d\n", res[i]);
  106. return ;
  107. }

HDU6333 Harvest of Apples (杭电多校4B)的更多相关文章

  1. 可持久化线段树的学习(区间第k大和查询历史版本的数据)(杭电多校赛第二场1011)

    以前我们学习了线段树可以知道,线段树的每一个节点都储存的是一段区间,所以线段树可以做简单的区间查询,更改等简单的操作. 而后面再做有些题目,就可能会碰到一种回退的操作.这里的回退是指回到未做各种操作之 ...

  2. 2018 Multi-University Training Contest 1 杭电多校第一场

    抱着可能杭电的多校1比牛客的多校1更恐怖的想法 看到三道签到题 幸福的都快哭出来了好吗 1001  Maximum Multiple(hdoj 6298) 链接:http://acm.hdu.edu. ...

  3. hdu6333 Harvest of Apples 离线+分块+组合数学(求组合数模板)

    Problem B. Harvest of Apples Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K ...

  4. 【魔改】莫队算法+组合数公式 杭电多校赛4 Problem B. Harvest of Apples

    http://acm.hdu.edu.cn/showproblem.php?pid=6333 莫队算法是一个离线区间分块瞎搞算法,只要满足:1.离线  2.可以O(1)从区间(L,R)更新到(L±1, ...

  5. 2018 Multi-University Training Contest 9 杭电多校第九场 (有坑待补)

    咕咕咕了太久  多校博客直接从第三场跳到了第九场orz 见谅见谅(会补的!) 明明最后看下来是dp场 但是硬生生被我们做成了组合数专场…… 听说jls把我们用组合数做的题都用dp来了遍 这里只放了用组 ...

  6. 2018 Multi-University Training Contest 2 杭电多校第二场

    开始逐渐习惯被多校虐orz  菜是原罪 1004  Game    (hdoj 6312) 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6312 虽然披着 ...

  7. 2019杭电多校&CCPC网络赛&大一总结

    多校结束了, 网络赛结束了.发现自己还是太菜了,多校基本就是爆零和签到徘徊,第一次打这种高强度的比赛, 全英文,知识点又很广,充分暴露了自己菜的事实,发现数学还是很重要的.还是要多刷题,少玩游戏. 网 ...

  8. HDU 4941 Magical Forest(map映射+二分查找)杭电多校训练赛第七场1007

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4941 解题报告:给你一个n*m的矩阵,矩阵的一些方格中有水果,每个水果有一个能量值,现在有三种操作,第 ...

  9. HDU 4902 Nice boat 2014杭电多校训练赛第四场F题(线段树区间更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4902 解题报告:输入一个序列,然后有q次操作,操作有两种,第一种是把区间 (l,r) 变成x,第二种是 ...

随机推荐

  1. Apache Tomcat® - Which Version Do I Want?

    Apache Tomcat® - Which Version Do I Want?http://tomcat.apache.org/whichversion.html

  2. FindBugs-IDEA插件的使用

    前言 Findbugs很多人都并不陌生,Eclipse中有插件可以帮助查找代码中隐藏的bug,IDEA中也有这款插件.这个插件可以帮助我们查找隐藏的bug,比较重要的功能就是查找潜在的null指针.  ...

  3. Yii2框架GridView自带导出功能最佳实践

    1. 导出excel的实现方法 (1)使用phpexcel封装工具类导出excel (2)使用爬虫爬取页面再处理封装工具类导出excel (3)使用页面渲染后处理html添加头部信息生成excel文件 ...

  4. git 提交的步骤

    1. git init //初始化仓库   2. git add .(文件name) //添加文件到本地仓库   3. git commit -m "first commit" / ...

  5. NPOI 上传Excel功能(二)

    3.上传文件,写入log using DC.BE.Business.SYS; using DC.BE.Entity.ERP; using DC.BE.Entity.SAS; using DC.BE.E ...

  6. Military Problem CodeForces 1006E (dfs序)

    J - Military Problem CodeForces - 1006E 就是一道dfs序的问题 给定一个树, 然后有q次询问. 每次给出u,k, 求以u为根的子树经过深搜的第k个儿子,如果一个 ...

  7. 当进行数据查询时候 要考虑创建一个model ;具备传入与输出的字段

    当进行数据查询时候 要考虑创建一个model ;具备传入与输出的字段

  8. c++ 动态生成string类型的数组

    定义一个字符串指针,将其初始化为空 char *a=NULL 然后输入输出 cin>>a cout<<a 编译无误,但执行会遇见错误 当为*a动态分配存储空间时,程序执行正常 ...

  9. hdu-2717(基础搜索bfs)

    题意:给你n和k,问你n最少花费多少代价能得到k: 有两种变换:1.n++或者n--: 2.n=n*2: 两种代价每次的花费都是1: 思路:一维的bfs,每次入队三个点,一个是n+1,一个是n-1,一 ...

  10. Django的View(视图)

    Django的View(视图) 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误, ...