比赛 2026.4.4 评测结果 TTEEEEEEEE
题目名称 区间 最终得分 0
用户昵称 xuyuqing 运行时间 11.395 s
代码语言 C++ 内存使用 130.52 MiB
提交时间 2026-04-04 10:13:58
显示代码纯文本

#include <cstdio>
#include <cstring>
#include <iostream>

using namespace std;

const int N = 510;
const int Mod = 666623333;

int n;
int m;

struct ran {
    int l;
    int r;
};
ran rans[N];
int nums[N][N];
long long sums[N][N];
bool flag[Mod];

long long pow_quick (long long x, long long y) {
    long long ans = 1;
    while (y) {
        if (y & 1) {
            ans = ans * x % Mod;
        }
        x = x * x % Mod;
        y >>= 1;
    }
    return ans;
}

long long inv (long long num) {
    return pow_quick (num, Mod - 2);
}

long long fact (long long num) {
    long long ans = 1;
    for (int i = 2; i <= num; i++) {
        ans = ans * i % Mod;
    }
    return ans;
}

int main () {
    
    freopen ("interval.in", "r", stdin);
    freopen ("interval.out", "w", stdout);
    
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        cin >> rans[i].l >> rans[i].r;
    }
    
    for (int i = 1; i <= n; i++) {
        memset (flag, 0, sizeof (flag));
        long long cc = 0;
        for (int j = i; j <= n; j++) {
            for (int k = rans[j].l; k < rans[j].r; k++) {
                if (!flag[k]) {
                    flag[k] = true;
                    cc++;
                }
            }
            nums[i][j] = cc;
        }
    }
    
    for (int i = 1; i <= m; i++) {
        int l, r;
        cin >> l >> r;
        long long cc = 0;
        for (int j = l; j <= r; j++) {
            for (int k = j; k <= r; k++) {
                cc = (cc + nums[j][k]) % Mod;
            }
        }
        int len = r - l + 1;
        cout << cc * inv ((len + 1) * len % Mod * inv (2) % Mod) % Mod << endl;
    }
    
    return 0;
}