Processing math: 100%

跟着做一遍 (挽救一下可怜我的发文量)

考虑设 fi,j 表示到第 i 轮,是否有合法方案满足 a=kib=kj 。同样设 gi,j 表示到第 i 轮,是否有合法方案满足 b=kia=kj

将转移分成以下几种:

  • kiki+1 的得主不同:
    • fi,jgi+1,i:必要条件是 b=ki+1,a=ki 在第 i+1 轮满足要求。
    • gi,jfi+1,i:必要条件是 a=ki+1,b=ki 在第 i+1 轮满足要求。
  • kiki+1 的得主相同:
    • fi,jfi+1,j:必要条件是 a=ki+1,b=kj 在第 i+1 轮满足要求。
    • gi,jgi+1,j:必要条件是 b=ki+1,a=kj 在第 i+1 轮满足要求。

线段树维护 f,g 。第一种转移维护了线段树信息后看看能不能这么转移,然后再看看如果状态合法就插入线段树;第二种转移相当于先看看 ki+1 对应是否合法,然后满足必要条件的 kj 一定是一段连续的值域区间的,将其余部分直接清空即可。

时间复杂度 O(nlogn)

代码咕了。

分类: 文章

Qiuly

QAQ

0 条评论

发表回复

Avatar placeholder

您的邮箱地址不会被公开。 必填项已用 * 标注