社区讨论

71

P13831 【MX-X18-T3】「FAOI-R6」比亚多西参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mhjcyla9
此快照首次捕获于
2025/11/04 00:32
4 个月前
此快照最后确认于
2025/11/04 00:32
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MOD = 998244353;

map<ll, ll> memo_F, memo_S;

ll F(ll n) {
    if (n == 0) return 0;
    if (n == 1) return 1;
    if (memo_F.find(n) != memo_F.end()) return memo_F[n];
    ll m1 = (n - 1) / 2;
    ll m2 = n / 2;
    ll res = (n % MOD + F(m1) + F(m2)) % MOD;
    memo_F[n] = res;
    return res;
}

ll S(ll n) {
    if (n == 0) return 0;
    if (memo_S.find(n) != memo_S.end()) return memo_S[n];
    if (n == 1) return 1;
    ll m = n / 2;
    ll res;
    if (n % 2 == 0) {
        ll part1 = (m % MOD) * ((2 * m + 1) % MOD) % MOD;
        ll part2 = 4 * S(m) % MOD;
        ll part3 = 3 * F(m) % MOD;
        res = (part1 + part2 - part3) % MOD;
    } else {
        ll part1 = ((2 * m + 1) % MOD) * ((m + 1) % MOD) % MOD;
        ll part2 = 4 * S(m) % MOD;
        ll part3 = F(m) % MOD;
        res = (part1 + part2 - part3) % MOD;
    }
    if (res < 0) res += MOD;
    memo_S[n] = res;
    return res;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    int T;
    cin >> T;
    while (T--) {
        ll L, R;
        cin >> L >> R;
        ll ans = (S(R) - S(L - 1)) % MOD;
        if (ans < 0) ans += MOD;
        cout << ans << '\n';
    }
    return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...