CC's

Back

给出2个数列,{ai},{bi}\{a_i\},\{b_i\}.要求支持以下操作

  1. 修改数列a的第i个为x
  2. 修改数列b的第i个为x
  3. 给出k,求最小的t,满足tbiaik\sum \lfloor \frac {t-b_i}{a_i} \rfloor \ge k

操作数不多于100000,操作3不多于1000;数列长度不多于10000,a的值域不大于1000

分析#

tbiai\lfloor \frac {t-b_i}{a_i} \rfloor拆开,观察前后可能出现的差。

taibiai\lfloor \frac {t}{a_i} \rfloor - \lfloor \frac {b_i}{a_i} \rfloor

t=k1ai+c1,bi=k2ai+c2t=k_1a_i+c_1,b_i=k_2a_i+c_2,代入观察。

tbiai=(k1k2)ai+c1c2ai\begin{aligned} \lfloor \frac {t-b_i}{a_i} \rfloor&=\lfloor \frac {(k_1-k_2)a_i+c_1-c_2}{a_i} \rfloor \\ \end{aligned}

可以发现,当把式子拆开时,有2种情况。

  • c1>c2c_1 > c_2,啥事没有。
  • c1<c2c_1 < c_2,拆开后会多统计一个1。

事先统计{bi}\{b_i\}aa的余数,那么有tt后就能快速数出第2种情况的数量。

代码#

[CCPC 2017] Master of Sequence
https://astro-pure.js.org/blog/ccpc-2017-master-of-sequence
Author Cheng Chen
Published at 2019年10月21日
Comment seems to stuck. Try to refresh?✨