题目

成爷爷一眼秒,\(tql!!!\)

多组询问,求

\[\sum_{i=0}^kC_{n}^i
\]

发现\(k<=n\)啊,于是我们可以把一组询问抽象成一个区间\([k,n]\)

左指针的移动非常好解决,就是加一下\(C_n^k\)减一下\(C_n^k\)就好了

考虑一下右指针的移动,就是\(n+1\)或者\(n-1\)

如果\(n+1\),就是从\(\sum_{i=0}^kC_n^i\)变成了\(\sum_{i=0}^kC_{n+1}^i\)

我们利用组合数的小学生求法,拆开我们的柿子

\[\sum_{i=0}^kC_{n+1}^i=\sum_{i=0}^kC_{n}^i+C_{n}^{i-1}=2\times \sum_{i=0}^kC_{n}^i-C_n^k
\]

如果是\(n-1\),就是求

\[\sum_{i=0}^kC_{n-1}^i=\sum_{i=0}^kC_{n}^i-C_{n-1}^{i-1}
\]

也就是

\[2\times \sum_{i=0}^kC_{n-1}^i-C_{n-1}^k=\sum_{i=0}^kC_{n}^i
\]

发现我们要求的东西都能从\(\sum_{i=0}^kC_n^i\)在\(O(1)\)推过去

于是莫队就没了

成爷爷奇偶性排序\(wa\)了,这告诉我们拒绝玄学

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define re register
#define LL long long
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
const int maxn=1e5+5;
inline int read() {
char c=getchar();int x=0;while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
}
const LL mod=1e9+7;
struct Ask{
int l,r,rk;
}q[maxn];
LL fac[maxn],inv[maxn],I2,ans;
int Ans[maxn];
int n,m,sz,L,R;
inline int cmp(Ask A,Ask B) {
if(A.l/sz==B.l/sz) return A.r<B.r;
return A.l<B.l;
}
inline LL ksm(LL a,int b) {
LL S=1;
while(b) {if(b&1) S=S*a%mod;b>>=1;a=a*a%mod;}
return S;
}
inline LL C(int n,int m) {
if(n<m) return 0;
return fac[n]*inv[n-m]%mod*inv[m]%mod;
}
inline void add_(int x) {ans+=C(R,x);ans%=mod;}
inline void del_(int x) {ans-=C(R,x);ans=(ans+mod)%mod;}
inline void add(int x) {
ans=(ans*2ll)%mod;
ans=(ans-C(x-1,L)+mod)%mod;
}
inline void del(int x) {
ans=(ans+C(x-1,L))%mod;
ans=(ans*I2)%mod;
}
int main() {
m=read();
for(re int i=1;i<=m;i++)
q[i].r=read(),q[i].l=read(),q[i].rk=i,n=max(n,q[i].r);
fac[0]=1;
for(re int i=1;i<=n;i++)
fac[i]=(fac[i-1]*(LL)i)%mod;
inv[n]=ksm(fac[n],mod-2);
for(re int i=n-1;i>=0;--i)
inv[i]=(inv[i+1]*(LL)(i+1))%mod;
sz=std::sqrt(n);
I2=ksm(2ll,mod-2);
L=1,R=1;ans=2;
std::sort(q+1,q+m+1,cmp);
for(re int i=1;i<=m;i++) {
while(R<q[i].r) add(++R);
while(L>q[i].l) del_(L--);
while(L<q[i].l) add_(++L);
while(R>q[i].r) del(R--);
Ans[q[i].rk]=ans;
}
for(re int i=1;i<=m;i++) printf("%d\n",Ans[i]);
return 0;
}

【AT987】高橋君的更多相关文章

  1. AT987 高橋君

    AT987 高橋君 给出 \(n,\ k\) ,求 \(\displaystyle\sum_{i=0}^kC_n^k\) , \(T\) 次询问 \(T\leq10^5,\ 0\leq k\leq n ...

  2. 高橋君とホテル / Tak and Hotels

    高橋君とホテル / Tak and Hotels Time limit : 3sec / Stack limit : 256MB / Memory limit : 256MB Score : 700  ...

  3. 高橋君とカード / Tak and Cards

    高橋君とカード / Tak and Cards Time limit : 2sec / Stack limit : 256MB / Memory limit : 256MB Score : 300 p ...

  4. 高橋君とカード / Tak and Cards AtCoder - 2037 (DP)

    Problem Statement Tak has N cards. On the i-th (1≤i≤N) card is written an integer xi. He is selectin ...

  5. AtCoder Beginner Contest 044 C - 高橋君とカード / Tak and Cards

    题目链接:http://abc044.contest.atcoder.jp/tasks/arc060_a Time limit : 2sec / Memory limit : 256MB Score ...

  6. AtCoder Beginner Contest 044 A - 高橋君とホテルイージー / Tak and Hotels (ABC Edit)

    Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement There is a hotel with ...

  7. AtCoder D - 高橋君と見えざる手 / An Invisible Hand 简单思维题

    http://arc063.contest.atcoder.jp/tasks/arc063_b 因为每次都是选取最大值,那么用dp[i]表示第i个数结尾能得到最大是多少. 其实就是用a[i]去减去左边 ...

  8. AtCoder Beginner Contest 022 A.Best Body 水题

    Best Body Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://abc022.contest.atcoder.jp/tasks/abc02 ...

  9. AtCoder-arc060 (题解)

    A - 高橋君とカード / Tak and Cards (DP) 题目链接 题目大意: 有 \(n\) 个数字,要求取出一些数字,使得它们的平均数恰好为 \(x\) ,问有几种取法. 大致思路: 只要 ...

随机推荐

  1. HDU 1576 A/B 暴力也能过。扩展欧几里得

    A/B Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  2. Wampserver环境配置

    ☆根目录修改问题 /.修改运行根目录 1.修改apache配置,将服务请求定位到新目录下 →左击wampserver,点击Apache打开httpd.conf文件,Ctrl+f搜索documentro ...

  3. 51Nod1053 最大M子段和V2 二分+DP

    传送门 直接DP的话最多也只能做到\(O(nm)\),对于\(5\times 10^4\)的数据范围实在无能为力 夹克老爷提供的做法是贪心,思想大概是在调整的同时,合理构造每个选择对应的新状态,使得新 ...

  4. 本地快速搭建 FTP 服务器

    一.什么是FTP FTP(File Transfer Protocol)是TCP/IP网络上两台计算机传送文件的协议,使得主机间可以共享文件. 二.搭建前期准备 1.首先打开控制面板找到“程序”点击打 ...

  5. 【java错误】System.out.println()出错

    今天想测试java的System的类,没想到居然出错了.在同一个包下的java文件System全错,而其他包中的System没错.上网查了下资料,原来我是重定义了System类,覆盖了原来的Syste ...

  6. Atitit.resin  could not create the java virtual machine问题

    Atitit.resin  could not create the java virtual machine问题 1. 正常的参数是这样1 2. 错误的cmd运行时候的参数1 3. 输出2 4. 原 ...

  7. Spring Boot—12URL映射

    package com.sample.smartmap.controller; import java.util.List; import org.springframework.beans.fact ...

  8. 使用99元一年的256MB高性能阿里云Redis加速Discuz论坛

    介绍 Discuz是一个常见的论坛,支持使用Redis来对论坛进行加速访问,对于访问量比较大的论坛能够取到很好的作用,本文介绍如何使用阿里云高性价比256MBRedis来加速该论坛. 阿里云Redis ...

  9. linux centos7最小化安装桥接模式网络设置、xshell、xftf

    一.网络连接设置1.桥接模式 使用电脑真实网卡,可以和自己的电脑连接,也可以和外部网络连接2.NAT模式 使用wmware network adapter vmnet8虚拟网卡,可以和自己的电脑连接, ...

  10. 搭建Kafka开发环境

    Kafka版本是:kafka_2.10-0.8.2.1 1.maven工程方式 在pom.xml中配置kafka依赖 1 2 3 4 5 <dependency>     <grou ...