编号为 i 的哨站开通时,每座已开通哨站的补给券 x 变为 max(0,x−i),新开通哨站收到的总量为 ∑min(i,x)。
按开通天数升序记为事件 t=1,…,n,对应原编号 I[t](也是本次索取额度),初始储备为 A[t]。令前缀和 P[t]=∑k=1tI[k]。
对某座在时刻 r 开通的哨站,记它开通瞬间可供后续索取的总额为 S[r]。之后每个更晚的事件 t>r 会依次索取 I[t]:它会从 t=r+1 开始连续付满,直到某次 u 首次使得 P[u]−P[r]≥S[r],在 u 只付尾款,之后为 0。若直到最后都榨不干(P[n]−P[r]<S[r]),最终剩余 S[r]−(P[n]−P[r])。
于是每次事件 t 的收入可拆成:仍有余力的哨站数乘以 I[t],再加上恰好在本次被榨干者的尾款之和。用差分数组维护“仍能付满”的人数,用数组累加尾款,并用二分在前缀和上定位首次越界位置。
边境线上有 n 座哨站,编号从 1 到 n。第 i 座哨站初始储备 ai 枚补给券,并将在第 bi 天开通(保证所有 bi 互不相同)。
一座哨站开通时,所有已经开通的哨站都要向它移交补给券:编号为 i 的哨站开通时,每座已开通哨站向其移交 i 枚;若某座哨站当前不足 i 枚,则把剩余全部交出。
请计算全部哨站都开通之后,各哨站剩余的补给券数量。
哨站个数不超过 2×105,每座哨站的初始补给券不超过 109,开通天数在 2 到 109 之间。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.