异或和大小比较类问题——抓住最高位:CF1863F

本文搬运自本人高中时期CSDN博客,若图片加载不出来,可到原文查看:https://blog.csdn.net/zhangtingxiqwq/article/details/132629186

https://codeforces.com/contest/1863/problem/F

  • 因为有等于,所以考虑异或和为0的合法区间,它可以随意切

  • 现在考虑切开后左边大于右边,可以发现左右边最高位可以互相抵消,似乎不太可做?

  • 此时可以换个考虑,考虑大区间的异或和的最高位,这一位在左右两个区间 恰好 有一位为1,而为1的那个区间就是转移到的区间

  • 然后考虑下图,对于 [i:j][i:j] ,可以转移到的要么以 ii 开头,要么以 jj 结尾。所以其实只需要判断 ii 开头和 jj 结尾的更大区间是否存在一个合法区间满足最高位恰好存在于当前这个区间里面。代码就是: if((l[i]|r[j])&nx)
    在这里插入图片描述

相似套路题目:

  • GYM104420D