专栏文章
题解:P14188 [ICPC 2024 Hangzhou R] Barkley III
P14188题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @minltd6k
- 此快照首次捕获于
- 2025/12/02 04:30 3 个月前
- 此快照最后确认于
- 2025/12/02 04:30 3 个月前
考 XCPC 训练赛的时候见到的题,赛时拼尽全力无法战胜,故写一篇题解记录一下。
下面两段是我赛时的想法,都是错的我太菜了,不感兴趣的可以跳过。
先给出一个大部分人都会考虑的做法:将 拆位,对于每一位分别维护。发现与操作相当于是区间赋 ,赋值操作是单点赋值。查询操作就是从高位往低位扫,如果该位只有一个 ,显然删除这个 能使答案最大化。复杂度 。显然过不了。
考虑优化,我们运用势能分析,发现每一位只会有 个 ,于是考虑使用神秘集训队科技压位 Trie,复杂度是 。发现显然还是过不了。过不了你在这哔哔什么
上面都是假做法,接下来讲真做法。
发现把每一位都拆出来不可做,因为这样至少会有一个 ,因此考虑将所有位统一处理。
还是线段树,考虑在线段树上维护这个区间的与和,同时维护这个区间内是否只有一个 ,本质上就是将 棵线段树上的数据压到了一棵线段树内。
发现与和这个信息是平凡的,接下来讨论区间 信息如何维护。
考虑合并,可以分讨这个 出现在了左儿子还是右儿子。至于区间修改操作,需要讨论两种情况。
- 如果修改的不是元区间,则这一位满足条件需要满足与的是 且这一位本身满足条件,因为与 就会直接被赋成 。所以直接与上修改的 即可。
- 如果修改的是元区间,因为区间长度只有 ,所以只要这一位是 那就恰好有 个 。故不论原来是 还是与了 这一位都会变成 。所以可以或上修改的 按位取反的结果。
信息已经维护好了,那么可以直接查询区间信息,找最高的只有一个 的那一位,然后线段树二分找出这个位置,把这个位置刨去就能得到答案了。
代码写的有点丑,就不放了。想看的自己点进来看。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...