問題の意味
$ N $床、$層の支出$のa_iを$の第$ Iのコストの合計は、$ I + 1 $の層に、または$ X_I(1当量\ $ X_I 1 $)$層に$型PI $の可能性があります。そして、回$ Q $の問い合わせがあり、$ L $ $ jは$層の所望のコストにそれぞれの層を問い合わせます。
分析
そのような添加剤が有することが望ましいかもしれない、従って、プレフィックスと$和を維持する[I] $:$ $ 1から$ I $から望ま。
そこ$ I $ $ I + 1 $ $ E $に対する予想価格から提供
$ E = a_iを+(1- \ FRAC {R_iを} {S_I})(和[I] -sum [X_I] + E)$
解得$ E = [s_ia_i +(S_I-R_iを)(和[I] -sum [X_I])] / R_iを$
#include <ビット/ STDC ++ H> 使用して 名前空間STDを、 typedefの長い 長いLL。 CONST LL MOD = 1E9 + 7 。 const int型 MAXN = 500000 + 10 。 LL和[MAXN]。 INTのN、Q。 LL qpow(LLのB LL) { LL RET = 1 。 一方、(b)は、 { もし、(B&1)RET = RET *%のMOD。= A *%のMOD。 B >> = 1 。 } リターンRET; } LL INV(LL X) { 戻り qpow(X、mod- 2 )。 } // 第I层到第I + 1层的期望 ボイドのGeTeは(LL iは、LLは、LL Siは、LL AI、LLのXI RI) { LL Eは = Siが*%aiをMOD。 E =(E +(SI - RI)*(SUM [I] -和[XI])%のMOD)。 E = E *のINV(RI)%のMOD。 E =(E + MOD)%MOD。 和[I + 1 ] =(SUM [I] + E)%MOD。 } int型のmain() { int型のT。 scanf関数(" %d個"、&T)。 一方、(T-- ) { scanf関数(" %d個の%のD "、&N、&Q)。 以下のために(int型 i = 1 ; iが<= N; iは++ ) { LL RIは、SI、XIは、愛。 scanf関数(" %LLD%LLD%LLD%LLD "、およびRI、およびSI、&XI、およびAI)。 Geteの(I、里、SI、AI、XI); } のために(int型 i = 0 ; iは、Q <I ++の) { int型のL、R。 scanf関数(" %D%D"&L& R); のprintf(" %LLDする\ n "、(和[R] -和[L] + MOD)%のMOD); } } }
参考リンク:https://blog.csdn.net/mmk27_word/article/details/99472953