牛客寒假算法基础集训营6 G-区间或和

求a|(a+1)|(a+2)|...|(b-1)|b。

 

分析 :

①:a=b  答案 = a

②:a != b

a 和 b 从高位到低位 第一次不同 在 地 i 位

比如 

001010   ----a

001110  -----b

颜色部分为 i 位

i位 左边 按照 a 定, i位 右边 全是 1

所以 区间 a ~ b 和 可以转化为 

001010

001110

000111   ----如何求?(见代码)

-------------------

001111   ->答案 

 

 1 #include<stdio.h>
 2 typedef long long ll;
 3 
 4 int main() {
 5     ll a,b;
 6     while(~scanf("%lld%lld",&a,&b)) {
 7         ll c=a^b;
 8         ll x=1;
 9         while(x<c) x*=2;
10         printf("%lld\n",a|b|(x-1));
11     }
12     return 0;
13 }

 

posted @ 2019-02-03 15:51  Frontierone  阅读(27)  评论(0编辑  收藏  举报