题目链接

题意:求出C(n,0)~C(n,m)的和,mod 1e9+7 。

分析:题目给的数据范围1<=n,m<=1e5,1<=T<=1e5,直接求出C(n,i)然后累加起来显然复杂度不行,在官方的题解中给出了如下的公式。

虽然在比赛中找出了这两个东西,但是看过的人那么多,一味的以为有直接用公式算出来的方法,所以一直在推公式,思维太局限,没有想到莫队。预处理阶乘和逆元,在双指针移动的时候能够O(1)的求出C(i,j);废话不多说,上代码。

#include <bits/stdc++.h>
#define mst(a,b) memset(a,b,sizeof(a))
#define ALL(x) x.begin(),x.end()
#define pii pair<int,int>
#define eps 1e-8
inline int lowbit(int x){ return x & -x; }
const int N = 1e5+10;
const long long mod = (long long) 1e9 + 7;
const int INF = 0x3f3f3f3f;
const long long LINF = (1LL << 62);
typedef long long LL;
typedef unsigned long long ULL;
const double PI = acos(-1.0);
using namespace std;LL C[N],inv[N],ans[N];
int bl[N];struct Q{int n, m, id, No;  bool operator < (const Q &t) const{if(id != t.id) return id < t.id;  //对块排序,相同的块就按右区间小的排return m < t.m;}
}Q[N];
LL q_pow(LL base, LL b){LL res = 1;while(b){if(b&1) res = res * base % mod;base = base * base % mod;b >>= 1;}return res;
}
void init(){   //预处理阶乘和逆元C[0] = C[1] = 1;for(int i = 2; i <= 1e5; i++) C[i] = C[i - 1] * i % mod;inv[(int)1e5] = q_pow(C[(int)1e5], mod - 2);for(int i = 1e5 - 1; i >= 0; i--) inv[i] = inv[i + 1] * (i + 1) % mod;
}
inline LL get_C(int n, int m){return C[n] * inv[m] % mod * inv[n - m] % mod;
}int main(){
#ifdef LOCALfreopen("in.txt", "r", stdin);
//    freopen("out.txt","w",stdout);
#else
//    freopen("caravan.in","r",stdin);
//    freopen("caravan.out","w",stdout);
#endifinit();LL inv2 = q_pow(2, mod - 2);int blo = sqrt(1e5);for(int i = 1; i <= 1e5; i++) bl[i] = (i - 1) / blo + 1; //预处理每个数所在的块的编号int T; scanf("%d",&T);int n, m;for(int i = 1; i <= T; i++){scanf("%d%d",&Q[i].n,&Q[i].m);Q[i].No = i;Q[i].id = bl[Q[i].n];}sort(Q + 1, Q + 1 + T);int l = 0, r = 0;LL sum = 1;for(int i = 1; i <= T; i++){  //然后就是愉快的左右指针移动求答案了,下面就是公式所对应的东西。while(l < Q[i].n) sum = (sum + sum - get_C(l, r) + mod) % mod, l++;while(l > Q[i].n) sum = (sum + get_C(l - 1, r)) * inv2 % mod, l--;while(r < Q[i].m) sum = (sum + get_C(l, r + 1)) % mod, r++;while(r > Q[i].m) sum = (sum - get_C(l, r) + mod) % mod, r--;ans[Q[i].No] = sum;}for(int i = 1; i <= T; i++) printf("%I64d\n",ans[i]);return 0;
}

HDU - 6333 Harvest of Apples (莫队)相关推荐

  1. HDU - 6333 Problem B. Harvest of Apples(莫队变形+思维+组合数学,好题)

    题目链接:点击查看 题目大意:给出n个苹果树,每个苹果树上可以摘一个苹果,问摘不超过m个苹果有多少种方式 题目分析:首先根据题意和样例可以推出,答案就是一个组合数之和,设C(n,m)为从n个数中选m个 ...

  2. 杭电多校 Harvest of Apples 莫队

    问题 B: Harvest of Apples 时间限制: 1 Sec  内存限制: 128 MB 提交: 78  解决: 35 [提交] [状态] [讨论版] [命题人:admin] 题目描述 Th ...

  3. HDU - 6333 Harvest of Apples

    题意: T次询问,每次给出n,m.求sigma(k:0->m)C(n, k). 题解: 用离线莫队来做. 令S(n,m) = sigma(k:0->m)C(n, k). S(n+1, m) ...

  4. hdu 4676 Sum Of Gcd 莫队+phi反演

    Sum Of Gcd 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4676 Description Given you a sequence of ...

  5. HDU - 6610 Game(带修莫队)

    题目链接:点击查看 题目大意:给出一个长度为 n 的序列 a,sum 为数列 a 的前缀异或和,再给出 m 次操作,每次操作分为两种类型: 1 l r:询问 sum 在区间 [ l , r ] 内有多 ...

  6. HDU 4417 Super Mario(莫队 + 树状数组 + 离散化)

    Super Mario 思路 区间查找问题,容易想到离线莫队,确实这题就是莫队,接下来我们考虑如何维护区间高度值问题. 既然是离线嘛,我们容易想到离散化和他挂钩,想想这题是否需要离散化,高度的最大值是 ...

  7. hdu 5145 NPY and girls (莫队算法)

    题意:有一个长度为n的数字序列,m次询问一个区间l-r中数字重新排列的方案数(mod 10^9+7). 明显的莫队算法,只需要排序,然后预处理一下逆元就可以了. 所谓的莫队算法,最初版本是求曼哈顿距离 ...

  8. HDU 6333 Problem B. Harvest of Apples(莫队离线)

    Problem B. Harvest of Apples(莫队离线) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/26214 ...

  9. *【HDU - 6333】Problem B. Harvest of Apples (莫队,逆元,组合数学)(这样预处理正确吗?)

    题干: There are nn apples on a tree, numbered from 11 to nn.  Count the number of ways to pick at most ...

最新文章

  1. Fluid — 云原生环境下的高效“数据物流系统”
  2. 工作112:空字符串引发的问题
  3. PaperNotes(17)-图卷积神经网络GCN-笔记
  4. 天池 在线编程 寻找字母(计数)
  5. 简单的网页制作_制作简单网页物体
  6. Linux安装nginx详细步骤
  7. 手动配置 hibernate 项目
  8. get函数和getline函数
  9. STL map 的基本成员函数
  10. 游戏开发入门终极指南(技术资源大合集)
  11. android 音量曲线,Android音量控制曲线
  12. 苹果手机开发微信公众号 禁止分享时遇到了问题
  13. android 9.0 默认打开开发者选项显示
  14. [USACO12FEB]牛券Cow Coupons
  15. 用js javascript 创建网页快捷方式
  16. python狗品种识别_使用python+keras来识别狗的品种
  17. 设计一个动物声音“模拟器”
  18. CTF密码学中RSA学习以及总结
  19. php读取xml文件,并存入数据库
  20. 应用统计学学什么科目_应用统计考研都考哪些科目 你必须了解

热门文章

  1. mysql-5.7.13-winx64如何安装_mysql 5.7.13 winx64安装配置步骤图文教程
  2. 新梓航无限建站系统Duson_systemV4.4.3+多模板
  3. 数据采集课程录制计划
  4. 安装Adobe CS5.5系列软件出错的解决办法
  5. linux上不了网有两个网卡,linux上两个常见的网卡报错
  6. 移动互联网的营销新策略
  7. Aplication的作用
  8. linux进程流量检测,linux使用shell检测并记录网卡流量
  9. Review:Microbiota, metagenome, microbiome傻傻分不清
  10. matlab 求状态转移矩阵,状态转移矩阵计算解读.ppt