这莫队太强啦

先推公式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)!)

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

然后就可以直接套莫队了

#include<map>
#include<set>
#include<ctime>
#include<cmath>
#include<stack>
#include<queue>
#include<string>
#include<vector>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define lowbit(x) (x & (-x)) typedef unsigned long long int ull;
typedef long long int ll;
const double pi = 4.0*atan(1.0);
const int inf = 0x3f3f3f3f;
const int maxn = 1e5+;
const int maxm = ;
const int mod = 1e9+;
using namespace std; int n, m, tol, T;
int block;
struct Node {
int l;
int r;
int id;
bool operator < (Node a) const {
return l/block != a.l/block ? l/block < a.l/block : r < a.r;
}
};
Node node[maxn];
ll res[maxn];
ll fac[maxn];
ll inv[maxn];
ll ans; void init() {
ans = ;
memset(res, , sizeof res);
memset(node, , sizeof node);
} ll fa_pow(ll a, ll b) {
ll ans = ;
a %= mod;
while(b) {
if(b & )
ans = ans * a % mod;
a = a * a % mod;
b >>= ;
}
return ans % mod;
} void handle() {
fac[] = ;
inv[] = ;
for(int i=; i<=; i++) {
fac[i] = fac[i-] * i;
fac[i] %= mod;
inv[i] = fa_pow(fac[i], mod-);
}
} ll C(int n1, int m1) {
if(m1 > n1) return ;
ll ans = fac[n1] * inv[m1] % mod * inv[n1-m1] % mod;
return ans;
} int main() {
init();
handle();
scanf("%d", &n);
block = sqrt(n);
for(int i=; i<=n; i++) scanf("%d%d", &node[i].l, &node[i].r), node[i].id = i;
sort(node+, node++n);
int L = ;
int R = ;
for(int i=; i<=n; i++) {
while(L > node[i].l) {
L--;
ans = (ans + C(L, R)) % mod * inv[] % mod;
}
while(L < node[i].l) {
ans = (ans * % mod - C(L, R)) % mod + mod;
ans %= mod;
L++;
}
while(R < node[i].r) {
R++;
ans = (ans + C(L, R)) % mod;
}
while(R > node[i].r) {
ans = (ans - C(L, R) % mod) + mod;
ans %= mod;
R--;
}
res[node[i].id] = ans;
}
for(int i=; i<=n; i++) printf("%I64d\n", res[i]);
return ;
}

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. 学习 yii2.0——视图之间相互包含

    布局 首先创建一个布局文件simple.php,路径是在views/layout/目录下. <p>this is header</p> <?= $content ?> ...

  2. js处理ajax返回的json数组

    一.json对象和json数组的区别 jsonObject = {} # json对象 jsonArray=[{},{}] # json数组 二.数据处理 前台接收到后台传过来的json数组实际上是一 ...

  3. PHPer未来路在何方...

    PHP 从诞生到现在已经有20多年历史,从Web时代兴起到移动互联网退潮,互联网领域各种编程语言和技术层出不穷, Node.js . GO . Python 不断地在挑战 PHP 的地位.这些技术的推 ...

  4. Redis教程(Windows)

    安装 1)下载redis压缩包并  , 推荐地址:https://github.com/MSOpenTech/redis/releases Redis 支持 32 位和 64 位.这个需要根据你系统平 ...

  5. [转帖]linux 清空history以及记录原理

    linux 清空history以及记录原理 自己的linux 里面总是一堆 乱七八槽输错的命令 用这个办法 可以清空 linux的内容. 清爽一些. 1.当前session执行的命令,放置缓存中,执行 ...

  6. java随笔4 java中接参整形转字符串

    通过+‘’来实现

  7. css瀏覽器私有前綴名

    -webkit-:chrome,safari -o-:opera -moz-:firefox -ms-:ie

  8. Gitlab中README.MD编写格式模板

    README.MD文件 格式: 源码: # Hbase组件 ## Maven依赖 ``` <dependency> <groupId>catf</groupId> ...

  9. LODOP打印安装到win的特殊字体

    LODOP能够打印的字体,来源于安装到本机windows里字体库的字体,如果需要打印特别的字体,需要在该操作系统安装.由于web网站的用户千差万别,字体库也有不同,但是一般常见的字体都是有的,因此做模 ...

  10. Jetson TX1 install py-faster-rcnn

    Install py-faster-rcnn following the official version  https://github.com/rbgirshick/py-faster-rcnn ...