Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
98598 | CSYZ_LiWenX | ssh | C++ | 通过 | 100 | 171 MS | 5744 KB | 1530 | 2023-08-16 12:05:45 |
#include<bits/stdc++.h> #define int long long #define mod 1000000007 using namespace std; int quickpow(int a,int b){ int ret=1; while(b){ if(b&1) ret=ret*a%mod; a=a*a%mod; b>>=1; } return ret; } int fac[100005],inv[100005]; void init(int n){ fac[0]=1; for(int i=1;i<=n;i++) fac[i]=fac[i-1]*i%mod; inv[n]=quickpow(fac[n],mod-2); for(int i=n-1;~i;i--) inv[i]=inv[i+1]*(i+1)%mod; } int C(int n,int m){ if(m>n) return 0; return fac[n]*inv[m]%mod*inv[n-m]%mod; } int n,k; struct Q{ int l,r,id; }q[100005]; int ans[100005]; int in[100005],size; bool cmp(Q x,Q y){ if(in[x.l]==in[y.l]){ if(in[x.l]&1) return x.r<y.r; return x.r>y.r; } return x.l<y.l; } int inv2=(mod>>1)+1; signed main(){ // freopen("2.in","r",stdin); // freopen("_.out","w",stdout); ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); init(100000); int m;cin>>m; for(int i=1;i<=m;i++){ cin>>q[i].l>>q[i].r; q[i].id=i; } size=sqrt(100000); for(int i=1;i<=100000;i++){ in[i]=(i-1)/size+1; } sort(q+1,q+1+m,cmp); int l=-1,r=-1,now=0; for(int i=1;i<=m;i++){ // cout<<q[i].l<<' '<<q[i].r<<'\n'; while(l<q[i].l){ now=now*2%mod; now=((now-C(l,r))%mod+mod)%mod; l++; } while(l>q[i].l){ l--; now=(now+C(l,r))%mod; now=now*inv2%mod; } while(r<q[i].r){ r++; now=(now+C(l,r))%mod; } while(r>q[i].r){ now=((now-C(l,r))%mod+mod)%mod; r--; } ans[q[i].id]=now; } for(int i=1;i<=m;i++){ cout<<ans[i]<<'\n'; } }