版权声明:本文为博主原创文章未经博主允许不得转载。 /Lzedo/article/details/
我们知道在范围[m,n]内,对于二进制表示的第i位只要这个范围内有一个数的第i位为0,那么我们结果f(m,n)的第i位就为0
那么,如果m的第i位是1并且之后[m,n]范围内的所有数第i位都是1,那么我们最后结果的第i位就是1了
因为所以数是连续的,假设當前数是x并且x的第i位是1。每次x增加1对于第i位,如果能够保持是1那么可以保持多少的长度呢?
那么如果第i - 1到第0位都是0的话那么可以保持的长度l1=2i个。
如果第i - 1位到第0位存在一些位为1的话即我们之前已经取走了一部分,那么我们需要减去取走的部分l2(第i - 1位到第0位代表的数嘚值)
最后可以保持的长度为:l=l1?l2。
观察可以发现:比如对于第2位那么可以保持的长度为4。
并且对于我们的例子数5对应的101,对于第2位l1=4,l2=01=1那么可以保持的长度l=3。由于我们的n?m≤l所以第2位为1。
即求m和n的左边相同的部分