专栏文章

雨森润奈

P4424题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mip02j89
此快照首次捕获于
2025/12/03 03:57
3 个月前
此快照最后确认于
2025/12/03 03:57
3 个月前
查看原文
不需要卡常的 O(nmqw)O(\frac{nmq}{w}) 做法!
考虑容易发现与 00 和或 11 特别强而反过来则没有用,启发我们时光倒流,那么对于一个点,我们考虑他如果与 00,那么那些 00 点都是因为这次与操作才变为 00,而之前是什么我并不关心,设为任意位,反过来或 11 也是一样。
然后遇到了一个困难的问题就是如果遇到两种选择怎么搞,容易发现这样的话随便选一个,最后剩下的有用的数必然只有一种,考虑用任意位和确定位重新建立字符串,以确定位为 11 时为例。
容易发现如果我在这个位置选择或,相当于是让我的任意点集合与当前所指向的集合或在一起。
如果选择与要求我的任意点集合包含我按位取反后的集合,然后你发现按照这个思路,如果在这个位置选择或,我们必然会得到全集,后续怎么选都无所谓可以直接产生贡献。
于是我们能够确认我们每次选什么,得到了一个 O(nmqw)O(\frac{nmq}{w}) 的做法。
我们肯定不希望得到这个复杂度考虑优化一下后面的部分,容易发现如果把每个点后面第一个与他相同的元素位置记录下来,那么每次相当于所有点都往后取一次,把所有最大值保留并在那个位置贡献答案,然后一直做,如果一直维护这个肯定做不了,考虑这样的话意味着最终选取的点集合一定能用一个点替代,而这个长得有点像字典序的东西显然可以用字符串哈希维护。
这样的话我们就把后面变成了 O(qmlogn)O(qm\log n),前面因为形式混乱想不到什么十分优秀的合并方式,但是这个时候你前面直接写 O(nmqw)O(\frac{nmq}{w}) 他就直接通过了,有点牛

评论

0 条评论,欢迎与作者交流。

正在加载评论...