20200307(DEF)题解 by 孙晨曦

设ans为结果
看L和R的二进制,设L最高位的1对应的值位A,R最高位的1对应的值位B(比如5的二进制是101,最高位的1对应的是2^2=4)
若A==B,ans这一位上的异或值必然是0,所以让L和R都减去最高位,重新找最高位的1。
若A!=B,那么B肯定大于A,也就是说R的二进制比L的二进制长,然后,可以这样想:
首先ans在B这一位上肯定应该是1,因为要使结果最大。
因为左端点二进制的长度是小于右端点的,
所以可以让第一个数除了B这一位是0,后面的位都是1(这个数一定能取到);让第二个数除了B这一位是1,后面的位都是0(这个数也一定能取到),即让第一个数是B-1,第二个数是B
此时B^(B-1)就是最大的结果
例如,假设L是101(二进制),R是10010(二进制),那么B是10000(二进制),让第一个数为1111,第二个数为10000,结果就是11111,肯定就最大了。
 
 这是思路,写法可以直接从二进制高位到低位找L和R第一个不同的位对应的值,然后直接输出这个值*2-1
原文地址:https://www.cnblogs.com/QLU-ACM/p/12437277.html