二进制 模拟 codeforces 485C

来源:互联网 发布:模拟人生要网络嘛 编辑:程序博客网 时间:2024/05/22 11:53

//求最多的一的个数,在二进制表示中

//判断[l,r]中,二进制表示有没有全是1的,如果有则结束

//否则,l,r均更新,减去小于l的最高的(100000...)<l,更新ans,不断进行询问

/*************************************************************************    > File Name: 485C.cpp    > Author: flyasdfvcxz    > Mail: 1099431883@qq.com     > Created Time: Fri 07 Nov 2014 05:06:52 PM CST ************************************************************************/#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <cstdlib>#include <vector>#include <queue>#include <map>#include <ctime>#include <cmath>#define ll long longusing namespace std;int n;ll l, r;int main(){cin >> n;while (n--){cin >> l >> r;if (l == r) {cout << l << endl;continue;}ll res = 0;while (1){int pos = -1;ll ans = -1;for (int i = 1; ; ++i){ll cur = (1LL << i) - 1;if (cur < l){pos = i;}else if (cur >= l && cur <= r){ans = cur;}else if (cur > r){break;}}if (ans != -1){res |= ans;cout << res << endl;break;}else{ll tmp = (1LL << pos);res |= tmp; l -= tmp;r -= tmp;}}}return 0;}


0 0