first code:
void solve() {
unsigned long long int l, r;
cin >> l >> r;
unsigned long long int ans = l ^ r;
for (int i = 63; i >= 0; i--) {
if ((ans >> i) & 1) {
for (int j = i - 1; j >= 0; j--) {
ans = (ans | (1 << j));
}
break;
}
}
cout << ans << '\n';
}
Second code:
void solve() {
unsigned long long int l, r;
cin >> l >> r;
unsigned long long int ans = l ^ r;
for (int i = 63; i >= 0; i--) {
if ((ans >> i) & 1) {
for (int j = i - 1; j >= 0; j--) {
ans = (ans | ((long long int)1 << j));
}
break;
}
}
cout << ans << '\n';
}
The first code gives wrong answer for 1000000000 2000000000 and second gives right answer.