hdu題面php
由於升級只能一級一級地升,因此所求指望知足了區間加的性質,能夠一級一級地算,而後求前綴和、輸出(狀態很差,臨博客涕零,不知所言)html
接着扔連接(留坑).net
參考別人博客寫的,感受像抄的同樣code
#include<stdio.h> const int mod=1e9+7; const int MAXN=5e5+5; int T; int n,m; long long inv(long long x)//快速冪求逆元 inv[a]=a^(p-2) { long long res=1LL; long long b=mod-2; while(b){ if(b&1) res=res*x%mod; x*=x; x%=mod; b>>=1; } return res%mod; } long long sum[MAXN]; int main() { scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); sum[0] = 0; for(int i = 1; i <= n; ++i) { long long r, s, x, a; scanf("%lld%lld%lld%lld", &r, &s, &x, &a); long long p = r * inv(s) % mod; sum[i] = (sum[i - 1] + (a + (1 - p + mod) % mod * (a + sum[i - 1] - sum[x - 1] + mod) % mod * inv(p) % mod) % mod + mod) % mod;//關鍵就是這個了 } while(m--) { int l, r; scanf("%d%d", &l, &r); long long ans = (sum[r - 1] - sum[l - 1] + mod) % mod;//這裏爲啥來着…… printf("%lld\n", ans); } } return 0; }