提交时间:2023-08-16 10:50:43

运行 ID: 98564

//Man always remember love because of romance only! #include<bits/stdc++.h> using namespace std; #define int long long const int mod=1e9+7; inline int read(){ int X=0,w=0; char ch=0; while(!isdigit(ch)) {w|=ch=='-';ch=getchar();} while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar(); return w?-X:X; } inline void write(int x){ if(x<0) putchar('-'),x=-x; if(x>9) write(x/10); putchar(x%10+'0'); } struct ques{ int n,k,id,bl; }q[100001]; bool cmp(ques x,ques y){ if(x.bl==y.bl) return x.n<y.n; return x.k<y.k; } int fac[100001],inv[100001]; int qpow(int x,int y){ int res=1; while(y){ if(y&1) res=res*x%mod; x=x*x%mod; y>>=1; } return res; } int C(int n,int m){ return fac[n]*inv[m]%mod*inv[n-m]%mod; } int ans[100001]; signed main(){ int T=read(); fac[0]=1; for(int i=1;i<=1e5;i++) fac[i]=fac[i-1]*i%mod; inv[100000]=qpow(fac[100000],mod-2); for(int i=1e5-1;i>=0;i--) inv[i]=inv[i+1]*(i+1)%mod; int B=sqrt(100000); for(int i=1;i<=T;i++){ q[i].n=read(),q[i].k=read(); q[i].id=i,q[i].bl=q[i].k/B; } sort(q+1,q+T+1,cmp); int l=1,r=0; int res=1; int inv2=qpow(2,mod-2); for(int i=1;i<=T;i++){ while(l<q[i].n){ res=(res*2%mod-C(l,r)+mod)%mod; l++; } while(l>q[i].n){ l--; res=(res+C(l,r))%mod*inv2%mod; } while(r<q[i].k){ r++; res=(res+C(l,r))%mod; } while(r>q[i].k){ res=(res-C(l,r)+mod)%mod; r--; } ans[q[i].id]=res; } for(int i=1;i<=T;i++){ write(ans[i]); puts(""); } return 0; }