Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
98591 CSYZ_LiuF ssh C++ 通过 100 141 MS 3008 KB 1633 2023-08-16 12:04:54

Tests(10/10):


#include<bits/stdc++.h> using namespace std; #ifdef IAKIOI #define cin fin ifstream cin("in.txt"); #endif #define ll long long constexpr int N = 1e5 + 5, mod = 1e9 + 7; int ans[N], f[N], invf[N], in[N]; inline int qpow(int b, int k) { int res = 1; while (k) { if (k & 1) { res = (ll) res * b % mod; } b = (ll) b * b % mod; k >>= 1; } return res; } int inv(int k) { return qpow(k, mod - 2); } int C(int n, int m) { if (n == m || m == 0) return 1; return (ll) f[n] * invf[m] % mod * invf[n - m] % mod; } struct Query { int l, r, id; }q[N]; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int m, s; cin >> m; s = 100000 / sqrt(m); f[0] = 1; for (int i = 1; i <= 100000; ++i) { in[i] = (i + s - 1) / s; f[i] = (ll) f[i - 1] * i % mod; } invf[100000] = inv(f[100000]); for (int i = 99999; i >= 0; --i) { invf[i] = (ll) invf[i + 1] * (i + 1) % mod; } for (int i = 1; i <= m; ++i) { cin >> q[i].l >> q[i].r; q[i].id = i; } sort(q + 1, q + 1 + m, [](const Query &a, const Query &b) { if (in[a.l] != in[b.l]) return in[a.l] < in[b.l]; return a.r < b.r; }); int l = 0, r = 0, tmp = 1, inv2 = inv(2); for (int i = 1; i <= m; ++i) { while (l < q[i].l) { tmp = (tmp * 2ll - C(l++, r)) % mod; } while (l > q[i].l) { tmp = ((ll) (tmp + C(--l, r)) * inv2) % mod; } while (r < q[i].r) { tmp = (tmp + C(l, ++r)) % mod; } while (r > q[i].r) { tmp = (tmp - C(l, r--)) % mod; } ans[q[i].id] = tmp; } for (int i = 1; i <= m; ++i) cout << (ans[i] + mod) % mod << '\n'; return 0; }


测评信息: