链接:P4774
前言:
交了18遍最后发现是多组数据没清空/ll
题意:
其实就是个扩中。
分析过程:
首先发现根据题目描述的选择剑的方式,每条龙对应的剑都是固定的,有查询前驱,后继(在该数不存在前驱时,最小值即为后继),和插入,删除操作,所以想到平衡树维护每条龙的剑的攻击力,记为b[i]
。建议使用非旋treap,非常之好写。
根据题目描述,a[i]
为每条龙生命值,p[i]
为每条龙回复量。发现能够击杀这条龙的条件可以列成一个方程:
x b [ i ] − y p [ i ] = a [ i ] xb[i]-yp[i]=a[i] xb[i]−yp[i]=a[i]
x x x 为攻击次数, y y y 为回复次数,转化为同余方程的形式为:
x b [ i ] ≡ a [ i ] ( m o d p [ i ] ) xb[i]\equiv a[i]\pmod {p[i]} xb[i]≡a[i](modp[i])
所以题目就被我们转化成了一个一元 n n n 次的不定方程组:
{ x b [ 1 ] ≡ a [ 1 ] ( m o d p [ 1 ] ) x b [ 2 ] ≡ a [ 2 ] ( m o d p [ 2 ] ) ⋮ x b [ n ] ≡ a [ n ] ( m o d p [ n ] ) \begin{cases}xb[1]\equiv a[1]\pmod {p[1]} \\ xb[2]\equiv a[2]\pmod {p[2]}\\ \vdots\\ xb[n]\equiv a[n]\pmod {p[n]}\end{cases} ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧xb[1]≡a[1](modp[1])xb[2]≡a[2](modp[2])⋮xb[n]≡a[n](modp[n])
求 x x x 的最小非负整数解。
这样的形式虽然不满足CRT和exCRT的形式,但我们可以从exCRT的思想得到启发。我们记录下前 m − 1 m-1 m−1 个方程的通解 x = x 0 + t ∗ M x=x_0+t*M x=x0+t∗M,也就是说我们已知 x 0 x_0 x0 和 M M M。
对于第 m m m 个方程 x b [ m ] − y p [ m ] = a [ m ] xb[m]-yp[m]=a[m] xb[m]−yp[m]=a[m] ,将上述 x x x 带入,有
( x 0 + t ∗ M ) b [ i ] − y p [ i ] = a [ i ] (x_0+t*M)b[i]-yp[i]=a[i] (x0+t∗M)b[i]−