http://acm.hdu.edu.cn/showproblem.php?pid=6333

莫队算法是一个离线区间分块瞎搞算法,只要满足:1.离线  2.可以O(1)从区间(L,R)更新到(L±1,R±1)就能直接套板子了

这道题不是区间算法,但是有递推式:

把它看成区间更新orz

所以可以莫队orz

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <cmath>
  3. #include <iostream>
  4. #include <stdio.h>
  5. #include<algorithm>
  6. #include <map>
  7. #include <cstring>
  8. #include <time.h>
  9. using namespace std;
  10. #define rep(i,t,n) for(int i =(t);i<=(n);++i)
  11. #define per(i,n,t) for(int i =(n);i>=(t);--i)
  12. #define mmm(a,b) memset(a,b,sizeof(a))
  13. const int maxn = 1e5 + ;
  14. const long long mod = 1e9 + ;
  15. map<int, int> mmp;
  16. typedef long long ll;
  17. struct node {
  18. int l, r, id;
  19.  
  20. }Q[maxn];
  21. ll fac[maxn], infac[maxn];
  22. long long ans[maxn];
  23. long long num[maxn];
  24. int a[maxn], pos[maxn];
  25. int n, m, k;
  26. int L = , R = ;
  27. long long Ans = ;
  28.  
  29. ll cal(ll x) {
  30. ll res = ;
  31. int k = mod - ;
  32. while (k) {
  33. if (k & ) {
  34. res *= x;
  35. res %= mod;
  36. }
  37. x *= x;
  38. x %= mod;
  39. k >>= ;
  40. }
  41. return res;//cal(x^ mod)
  42. }
  43. void init() {
  44. fac[] = ;
  45. rep(i, , maxn - )fac[i] = (fac[i-] * i)%mod;
  46. rep(i, , maxn - )infac[i] = cal(fac[i]);
  47. }
  48. ll C(ll a, ll b)
  49. {
  50. return 1ll * fac[a] * infac[b] % mod * infac[a - b] % mod;
  51. }
  52. bool cmp(node a, node b) {
  53. if (pos[a.r] == pos[b.r])
  54. return a.l < b.l;
  55. return pos[a.r] < pos[b.r];
  56.  
  57. }
  58. void add(int x) {
  59.  
  60. //num[a[x]]++;
  61. //if (num[a[x] - 1] == 0 && num[a[x] + 1] == 0)Ans++;
  62. //else if (num[a[x] - 1] && num[a[x] + 1])Ans--;
  63. Ans += C(n, m);
  64.  
  65. }
  66. void addl(int x) {
  67.  
  68. }
  69. void del(int x) {
  70. //num[a[x]]--;
  71. //if (num[a[x] - 1] == 0 && num[a[x] + 1] == 0)Ans--;
  72. //else if (num[a[x] - 1] && num[a[x] + 1])Ans++;
  73. Ans -= C(n, m + );
  74. }
  75.  
  76. int smain() {
  77. int t; scanf("%d", &t);
  78. init();
  79. Ans = ;
  80. mmm(num, );
  81. L = , R = ;
  82.  
  83. int sz = sqrt(1e5);
  84. for (int i = ; i <= 1e5; i++) {
  85. pos[i] = i / sz;
  86. }
  87.  
  88. rep(i,,t) {
  89. scanf("%d%d", &Q[i].l, &Q[i].r);
  90. Q[i].id = i;
  91. }
  92. sort(Q + , Q + + t, cmp);
  93. Ans = ;//S(m,n
  94. L = Q[].l; R = -;
  95. rep(i,,t){
  96. while (L < Q[i].l) {
  97. //del(L);
  98. Ans = (2ll * Ans - C(L, R) + mod) % mod;
  99. ++L;
  100. }
  101.  
  102. while (L > Q[i].l) {
  103. --L;
  104. //addl(L);
  105. Ans = ((Ans + C(L, R)) *infac[]%mod) % mod;
  106. }
  107.  
  108. while (R < Q[i].r) {
  109. ++R;
  110. //add(R);
  111. Ans = (Ans+C(L, R))%mod;
  112. }
  113. while (R > Q[i].r) {
  114. //del(R);
  115. Ans = (Ans-C(L, R)+mod)%mod;
  116. --R;
  117.  
  118. }
  119.  
  120. ans[Q[i].id] = Ans;
  121. }
  122. rep(i,,t)printf("%lld\n", ans[i]);
  123. return ;
  124. }
  125. /*
  126.  
  127. 6
  128. 60522 25373
  129. 36426 3283
  130. 48772 42553
  131. 33447 12441
  132. 3497 2182
  133. 7775 4025
  134.  
  135. */
  136. #define ONLINE_JUDGE
  137. int main() {
  138. //ios::sync_with_stdio(false);
  139. #ifndef ONLINE_JUDGE
  140. FILE *myfile;
  141. myfile = freopen("C:\\Users\\acm-14\\Desktop\\test\\b.in", "r", stdin);
  142. if (myfile == NULL)
  143. fprintf(stdout, "error on input freopen\n");
  144. FILE *outfile;
  145. outfile = freopen("C:\\Users\\acm-14\\Desktop\\test\\out.txt", "w", stdout);
  146. if (outfile == NULL)
  147. fprintf(stdout, "error on output freopen\n");
  148. long _begin_time = clock();
  149. #endif
  150. smain();
  151. #ifndef ONLINE_JUDGE
  152. long _end_time = clock();
  153. printf("time = %ld ms.", _end_time - _begin_time);
  154. #endif
  155. cin >> n;
  156. return ;
  157. }

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

  1. 【题解】BZOJ4241: 历史研究(魔改莫队)

    [题解]BZOJ4241: 历史研究(魔改莫队) 真的是好题啊 题意 给你一个序列和很多组询问(可以离线),问你这个区间中\(\max\){元素出现个数\(\times\)元素权值} IOI国历史研究 ...

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

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

  3. HDU 6278 - Just h-index - [莫队算法+树状数组+二分][2018JSCPC江苏省赛C题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6278 Time Limit: 6000/3000 MS (Java/Others) Memory Li ...

  4. 【莫队算法】【权值分块】bzoj3339 Rmq Problem

    如题. #include<cstdio> #include<algorithm> #include<cmath> using namespace std; #def ...

  5. hdu 5373 The shortest problem(杭电多校赛第七场)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5373 The shortest problem Time Limit: 3000/1500 MS (J ...

  6. hdu 5328 Problem Killer(杭电多校赛第四场)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5328 题目大意:找到连续的最长的等差数列or等比数列. 解题思路:1.等差等比的性质有很多.其中比较重 ...

  7. hdu 5319 Painter(杭电多校赛第三场)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5319 Painter Time Limit: 2000/1000 MS (Java/Others)   ...

  8. hdu 5326 Work(杭电多校赛第三场)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5326 Work Time Limit: 2000/1000 MS (Java/Others)    M ...

  9. 2019杭电多校赛第九场 Rikka with Mista

    Problem Description Rikka is a fervent fan of JoJo's Bizarre Adventure. As the last episode of Golde ...

随机推荐

  1. android 性能优化-工具篇

    一.Traceview 使用TraceView主要有两种方式: 1.直接打开DDMS,选择一个进程,然后按上面的“Start Method Profiling”按钮,等红色小点变成黑色以后就表示Tra ...

  2. 【Java】Java Queue的简介

    阻塞队列 阻塞队列有几个实现: ArrayBlockingQueue LinkedBlockingQueue PriorityBlockingQueue DelayQueue SynchronousQ ...

  3. sqlmap tamter

    支持的数据库 编号 脚本名称 作用 实现方式 all 1 apostrophemask.py 用utf8代替引号 ("1 AND '1'='1") '1 AND %EF%BC%87 ...

  4. NodeJS的url验证库模块url-valid

    这是我10月份做的项目其中的一个部件,主要用于url检验的. 我们知道Javascript做url检验,通常是使用正则表达式来判定,其格式是否正确,例如: /^https?:\/\//.test(ur ...

  5. mysql 修改表的每个列的字符类型

    #!/bin/shfor i in $(mysql -uroot -p112358s uarticles_2019 -e "show tables;"|egrep -v Table ...

  6. Jenkins这种构建工具,一般都是内部使用,所以外部基本上不能访问

    类似于Jenkins这种构建工具,一般都是内部使用,所以外部基本上不能访问,也可以隔绝外部黑客的入侵等.直接暴露外部是非常不安全的,特别是没有什么安全验证,容易被别人入侵做一些非法的事情! 所以,希望 ...

  7. 【SpringMVC学习07】SpringMVC中的统一异常处理

    我们知道,系统中异常包括:编译时异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发.测试通过手段减少运行时异常的发生.在开发中,不管是dao层 ...

  8. CSS实现响应式全屏背景图

    body { /* 加载背景图 */ background-image: url(images/background-photo.jpg); /* 背景图垂直.水平均居中 */ background- ...

  9. psd页面切割成html技巧总结

    关键字:psd切割技巧 生成html图片要点 css样式要点 rem 与高手切割后的代码对比学习提高(考察点:切割后的页面质量,源码大小及图片大小,js技术,动画技术,开发和命名规范等) 一.psd切 ...

  10. Rest风格理解

    之前一直不理解restful风格,今天终于理解了些(20170527) 正常我们在浏览器的地址栏中输入的地址很多都是发起的,发起的都是get请求 通过ajax可以设置put请求,F12查看浏览器请求头 ...