计算C(n,0)+C(n,1)+...+C(n,m)--Problem B. Harvest of Apples

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

四个while的顺序不能变,不知道为什么

#include
using namespace std;
typedef long long ll;
const int mod=1e9+7;
const int N=1e5+10;
ll block;
ll fac[N],inv[N];
ll L,R,now;
ll ans[N];
ll rev2;
ll qpow(ll b,int n)
{
    ll res=1;
    while(n)
    {
        if(n&1) res=res*b%mod;
        b = b*b%mod;
        n>>=1;
    }
    return res;
}
struct node
{
    int l,r,id;
};
node q[N];
bool cmp(node a,node b)
{
    if(a.l/block!=b.l/block)
        return a.l/blockq[i].l)//S(n-1,m)=(S(n,m)+C(n-1,m))/2,知道S(n,m),求S(n-1,m)
        {
            L--;
            updateNR(L,R);
            //delN(L--,R);
        }
        while(R>q[i].r)//S(n,m-1)=S(n,m)-C(n,m),知道S(n,m),求S(n,m-1)
        {
            //delM(L,R--);
            updateMR(L,R);
            R--;
        }
        ans[q[i].id]=now;
    }
    for(i=1;i<=t;i++)
        printf("%lld\n",ans[i]);
}

 

你可能感兴趣的:(比赛,组合数学,莫队)