求助我将第二篇题解的所有的int long long 全换成了__128会TLE
查看原帖
求助我将第二篇题解的所有的int long long 全换成了__128会TLE
757864
ruye楼主2023/12/21 15:03
#include <bits/stdc++.h>
using namespace std;
typedef __int128 i128;
typedef long long ll;
const ll MOD = 1e9 + 7;
ll Q, l, r, L, R, fx, ans, p2[102];
char c;
inline ll lenth(ll X1, ll X2, ll Y1, ll Y2, ll Z1, ll Z2)
{
    return max(min(min(X2, Y2), Z2) - max(max(X1, Y1), Z1) + 1, (ll)0);
}
inline void read(ll &x)
{
    x = 0, c = getchar();
    while (c < '0' || c > '9')
        c = getchar();
    while (c >= '0' && c <= '9')
        x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
}
inline void write(ll x)
{
    if (x > 9)
        write(x / 10);
    putchar((x % 10) ^ 48);
}
int main()
{
    read(Q), p2[0] = 1;
    for (int i = 1; i <= 60; i++)
        p2[i] = p2[i - 1] * 2;
    while (Q--)
    {
        read(l), read(r), fx = 1, ans = 0;
        for (int i = 1; i <= 60; i++)
        {
            fx = i;
            for (int j = 1; j <= 10; j++)
            {
                L = fx, fx = min((i128)fx * i, (i128)1e18 + 1), R = fx - 1,
                (ans += j * lenth(L, R, p2[i], p2[i + 1] - 1, l, r) % MOD) %= MOD;
                if (fx > p2[i + 1] - 1 || fx > r)
                    break;
            }
        }
        write(ans), putchar('\n');
    }
    return 0;
}

这个是题解的

2023/12/21 15:03
加载中...