#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 505;
const ll MOD = 1e9 + 7;
int a[N], b[N];
ll fac[N], inv[N];
ll sum[2 * N], qs[2 * N];
ll nCr[2 * N][N];
ll dp[2 * N][N]; // currently in i-th interval using j school
ll mop(ll a, ll p = MOD - 2) {
ll ans = 1;
for (;p != 0ll;p >>= 1ll, a = a * a % MOD) {
if (p & 1ll) ans = ans * a % MOD;
}
return ans;
}
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int n;
cin >> n;
fac[0] = 1;
for (int i = 1;i <= n;i++) {
fac[i] = fac[i - 1] * i % MOD;
inv[i] = mop(fac[i]);
}
vector<int> c;
c.push_back(0);
for (int i = 1;i <= n;i++) {
cin >> a[i] >> b[i];
c.push_back(a[i] - 1);
c.push_back(b[i]);
}
sort(c.begin(), c.end());
c.resize(unique(c.begin(), c.end()) - c.begin());
int sz = c.size();
for (int i = 1;i < sz;i++) {
nCr[i][0] = 1;
ll mul = 1;
for (int j = 1;j <= min(c[i] - c[i - 1], n);j++) {
mul = mul * (c[i] - c[i - 1] - j + 1) % MOD;
nCr[i][j] = mul * inv[j] % MOD;
}
}
for (int j = 0;j < sz;j++) qs[j] = 1;
// 0 1 2 3
// - 1 2 -
// - - 2 3
for (int i = 1;i <= n;i++) {
a[i] = lower_bound(c.begin(), c.end(), a[i] - 1) - c.begin();
b[i] = lower_bound(c.begin(), c.end(), b[i]) - c.begin();
for (int j = a[i] + 1;j <= b[i];j++) {
for (int k = min(c[j] - c[j - 1], n);k >= 1;k--) {
sum[j] = (sum[j] - dp[j][k] * nCr[j][k] % MOD + MOD) % MOD;
dp[j][k] = (dp[j][k] + dp[j][k - 1]) % MOD;
if (k == 1) dp[j][k] = (dp[j][k] + qs[j - 1]) % MOD;
sum[j] = (sum[j] + dp[j][k] * nCr[j][k]) % MOD;
}
}
for (int j = 1;j < sz;j++) {
qs[j] = (qs[j - 1] + sum[j]) % MOD;
}
// for (int j = 1;j < sz;j++) {
// for (int k = 1;k <= n;k++) {
// cout << dp[j][k] << " \n"[k == n];
// }
// }
}
cout << (qs[sz - 1] - 1 + MOD) % MOD << '\n';
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |