rt,目前再写 70 分做法,开 long long 可以,不然就 WA。
#include <bits/stdc++.h>
using namespace std;
const int N = 505, M = 105, mod = 998244353;
int f[N][N][M], g[N][N][M], L[N], R[N], n, m, q, s, t, c, k;
int main() {
cin >> n >> q;
for (int i = 1; i <= n; i ++)
cin >> L[i] >> R[i], f[i][i][0] = g[i][i][0] = 1;
for (int k = 1; k <= 100; k ++)
for (int i = 1; i <= n; i ++) {
for (int j = 1; j <= n; j ++) {
f[i][L[j]][k] = (f[i][L[j]][k] + f[i][j][k - 1] + mod) % mod;
f[i][R[j] + 1][k] = (f[i][R[j] + 1][k] - f[i][j][k - 1] + mod) % mod;
g[i][L[j]][k] = (g[i][L[j]][k] + g[i][j][k - 1] + mod) % mod;
g[i][R[j] + 1][k] = (g[i][R[j] + 1][k] - g[i][j][k - 1] + mod) % mod;
}
for (int j = 1; j <= n; j ++) {
f[i][j][k] += f[i][j - 1][k], g[i][j][k] += g[i][j - 1][k];
f[i][j][k] = (f[i][j][k] + mod) % mod, g[i][j][k] = (g[i][j][k] + mod) % mod;
}
g[i][i][k] = 0;
}
for (int i = 1; i <= q; i ++) {
cin >> s >> t >> c >> k;
int res = f[s][t][k];
for (int j = 0; j <= k; j ++)
res = (res - f[s][c][j] * g[c][t][k - j] % mod + mod) % mod;
cout << res << '\n';
}
return 0;
}