P4774 [NOI2018] 屠龙勇士

链接: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 m1 个方程的通解 x = x 0 + t ∗ M x=x_0+t*M x=x0+tM,也就是说我们已知 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+tM)b[i]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值