C. 歌唱比赛

    传统题 1000ms 512MiB

歌唱比赛

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

点击此处下载附加样例文件

题目描述

Farmer John 的 n 头牛站在了数轴上,自左向右依次编号为 1 ~ n,编号为 i 的牛在数轴上的位置为 XiX_i,性别为 SiS_iSiS_i ∈ {0,1},Si=0S_i=0 表示母牛,Si=1S_i=1 表示公牛)。任意两头牛不会站在同一位置上。

John 要从中选择若干头牛去参加歌唱比赛,要求:

对于每名被选中的母牛,在其左侧与其距离不超过 d 的范围内至少有一头公牛被选中。

John 想知道,他有多少种选择方案?

你能帮助他吗?答案可能很大,你需要输出答案 mod 1,000,000,007 的值。

输入格式

第一行:两个整数 n, d。

接下来 n 行,每行两个整数 Xi,SiX_i, S_i。(数据保证 X1<X2<<XnX_1 < X_2 < …… < X_n)

输出格式

一个整数,表示答案 mod 1,000,000,007。

输入样例

5 2
1 1
3 0
5 0
6 1
10 0

输出样例

5

样例解释

5 种选择方案为:

选择编号为 1 的牛;

选择编号为 4 的牛;

选择编号为 1, 4 的牛;

选择编号为 1, 2 的牛;

选择编号为 1, 2, 4 的牛。

数据范围

10% 的数据:n20n ≤ 20

另有 10% 的数据:d=0d = 0

另有 10% 的数据:n5000n ≤ 5000

70% 的数据:1n1061 ≤ n ≤ 10^6

100% 的数据:1n1071 ≤ n ≤ 10^7, 0d,Xi1090 ≤ d, X_i ≤ 10^9SiS_i ∈ {0,1}, 数据保证 X1<X2<<XnX_1 < X_2 < …… < X_n

提示

本题输入量较大 需要快读:

uint8_t buf[1<<20], *p1, *p2;
#define gc() (p1==p2 && (p2=(p1=buf)+fread(buf,1,1<<20,stdin)),*p1++)
int read() {
	int k = 0, c = gc();
	for (; !isdigit(c); c = gc()) ;
	for (; isdigit(c); c = gc()) k = k * 10 + (c ^ 48);
	return k;
}

2026-01-20

未参加
状态
已结束
规则
OI
题目
3
开始于
2026-1-20 8:30
结束于
2026-1-20 12:00
持续时间
3.5 小时
主持人
参赛人数
5