专栏文章

题解: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 训练赛的时候见到的题,赛时拼尽全力无法战胜,故写一篇题解记录一下。
下面两段是我赛时的想法,都是错的我太菜了,不感兴趣的可以跳过。
先给出一个大部分人都会考虑的做法:将 aa 拆位,对于每一位分别维护。发现与操作相当于是区间赋 00,赋值操作是单点赋值。查询操作就是从高位往低位扫,如果该位只有一个 00,显然删除这个 00 能使答案最大化。复杂度 O(nlogVlogn)O(n\log V\log n)。显然过不了。
考虑优化,我们运用势能分析,发现每一位只会有 O(n+q)O(n+q)11,于是考虑使用神秘集训队科技压位 Trie,复杂度是 O(nlogVlog64n)O(n\log V \log_{64} n)。发现显然还是过不了。过不了你在这哔哔什么
上面都是假做法,接下来讲真做法。
发现把每一位都拆出来不可做,因为这样至少会有一个 logV\log V,因此考虑将所有位统一处理。
还是线段树,考虑在线段树上维护这个区间的与和,同时维护这个区间内是否只有一个 00,本质上就是将 log\log 棵线段树上的数据压到了一棵线段树内。
发现与和这个信息是平凡的,接下来讨论区间 00 信息如何维护。
考虑合并,可以分讨这个 00 出现在了左儿子还是右儿子。至于区间修改操作,需要讨论两种情况。
  • 如果修改的不是元区间,则这一位满足条件需要满足与的是 11 且这一位本身满足条件,因为与 00 就会直接被赋成 00。所以直接与上修改的 xx 即可。
  • 如果修改的是元区间,因为区间长度只有 11,所以只要这一位是 00 那就恰好有 1100。故不论原来是 00 还是与了 00 这一位都会变成 00。所以可以或上修改的 xx 按位取反的结果。
信息已经维护好了,那么可以直接查询区间信息,找最高的只有一个 00 的那一位,然后线段树二分找出这个位置,把这个位置刨去就能得到答案了。
代码写的有点丑,就不放了。想看的自己点进来看

评论

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

正在加载评论...