4725: 【GESP2509五级】有趣的数字和

内存限制:512 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:1 解决:1

题目描述

样例输入 复制

3 8

样例输出 复制

19

提示

#include <algorithm>
#include <cstdio>
using namespace std;
int l, r;
long long ans;
pair<int, long long> cal2(int n, int p) {
    if (n == 0) { return {1 - p, 0}; }
    if (n == 1) { return {1, p}; }
    return {(n + 1) / 2, 1ll * n * (n + 1) / 4};
  
}
pair<int, long long> cal(int n, int p) {
    if (n <= 1) { return cal2(n, p); }
    long long x = 1ll << (31 - __builtin_clz(n));
    auto l = cal2(x - 1, p);
    auto r = cal(n - x, 1 - p);
    return {l.first + r.first, l.second + r.second + x * r.first};
}
int main() {
    scanf("%d%d", &l, &r);
    ans -= cal(l - 1, 1).second;
    ans += cal(r, 1).second;
    printf("%lld\n", ans);
    return 0;
}