1 条题解

  • 0
    @ 2025-11-23 21:53:42

    C++ :

    #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;
    }
    

    信息

    ID
    5658
    时间
    400ms
    内存
    512MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者