#4980. Problem 2. Lazy Sort

0

Problem 2. Lazy Sort

Problem 2. Lazy Sort

USACO 2025 US Open Contest, Platinum

Farmer John 有 NN 头奶牛(2N51062 \leq N \leq 5\cdot 10^6),他试图通过利用她们的懒惰来对一个长为 NN 的非负整数数组 AA 进行排序。他有很多重箱子,所以他把奶牛们排成一行,奶牛 i+1i+1 在奶牛 ii 后面,并交给奶牛 ii 共计 aia_i 个箱子(0ai0\le a_i)。

奶牛天生懒惰,所以她们总是看看能否把工作推给别人。从奶牛 11N1N-1,每一头奶牛依次看向她后面的奶牛。如果奶牛 ii 拥有的箱子比牛 i+1i+1 多,奶牛 ii 认为这是「不公平的」,并把自己的一个箱子交给奶牛 i+1i+1。这个过程会重复进行直到每头奶牛都满意为止。

Farmer John 此时将记录每头奶牛 ii 持有的箱子数量 bib_i,并根据这些值创建一个数组 BB。如果 B=sorted(A)B = sorted(A),那么 Farmer John 会高兴。不幸的是,Farmer John 忘记了 AA 中除了 QQ 个值以外的所有值(2Qmin(N,100)2 \leq Q \leq \min(N, 100))。幸运的是,这些值中包含他打算给第一头和最后一头奶牛的箱子数量。Farmer John 记得的每一个值以 ci  vic_i \; v_i 的形式给出,表示 aci=via_{c_i}=v_i1ciN1 \leq c_i \leq N1vi1091\le v_i\le 10^9)。求缺失值可以被填充的不同方案的数量,以使得他会高兴,答案对 109+710^9+7 取模。

输入格式(从终端 / 标准输入读入):

输入的第一行包含两个空格分隔的整数 NNQQ,分别表示奶牛以及查询的数量。

以下 QQ 行包含两个空格分隔的整数 ci  vic_i \; v_i,表示奶牛 cic_i 初始时拥有 viv_i 个箱子。输入保证 c1=1c_1 = 1cQ=Nc_Q = N,且 ci<ci+1c_i < c_{i+1}(输入的奶牛编号是严格递增的)。

输出格式(输出至终端 / 标准输出):

输出值 aia_i 可以被分配的不同方案的数量,以使得 Farmer John 在奶牛进行懒惰排序后会高兴,答案对 109+710^9+7 取模。输入保证存在至少一种合法的分配方案。

输入样例:


3 2
1 3
3 2

输出样例:


2

在这个例子中,Farmer John 记住了数组两端的值。数组 [3,2,2][3,2,2][3,3,2][3,3,2] 是在懒惰排序结束时会让 Farmer John 感到高兴的合法数组。

输入样例:


6 3
1 1
3 3
6 5

输出样例:


89

测试点性质: 测试点 3-4:N,vi100N,v_i\le 100。测试点 5-6:N100N\le 100vi106v_i \leq 10^6。测试点 7-9:N2105N \leq 2\cdot 10^5vi106v_i \le 10^6。测试点 10-12:N2105N \leq 2\cdot 10^5。测试点 13-15:没有额外限制。

供题:Suhas Nagar