P12032 [USACO25OPEN] Lazy Sort P

题目背景

**本翻译使用 AI 生成。**

题目描述

农夫约翰(Farmer John)有 $N$($2 \le N \le 5 \cdot 10^6$)头奶牛,他试图让它们依靠自身的懒惰性来排序一个长度为 $N$ 的非负整数数组 $A$。他有很多沉重的箱子,所以他把奶牛们排成一列,其中奶牛 $i+1$ 在奶牛 $i$ 的后面,并给奶牛 $i$ 分配 $a_i$($0 \le a_i$)个箱子。 奶牛们天生就很懒,所以它们总是想把工作推给别人。从奶牛 $1$ 到 $N-1$,每头奶牛依次看向它后面的奶牛。如果奶牛 $i$ 的箱子严格多于奶牛 $i+1$,奶牛 $i$ 会认为这“不公平”,并把它的一个箱子交给奶牛 $i+1$。这个过程会一直重复,直到每头奶牛都满意为止。 然后,农夫约翰会记下每头奶牛 $i$ 持有的箱子数量 $b_i$,并用这些值创建一个数组 $B$。如果 $B = \text{sorted}(A)$(即 $A$ 排序后的结果),那么农夫约翰就会很高兴。不幸的是,农夫约翰忘记了 $A$ 中除了 $Q$($2 \le Q \le \min(N, 100)$)个值之外的所有值。幸运的是,这些记住的值包括了他打算给第一头和最后一头奶牛的箱子数量。FJ 记住的每个值都以 $c_i\; v_i$ 的形式给出,表示 $a_{c_i} = v_i$($1 \le c_i \le N$,$1 \le v_i \le 10^9$)。请确定有多少种不同的方法可以填补缺失的值,使得他在奶牛们完成懒惰排序后会感到高兴,结果对 $10^9 + 7$ 取模。

输入格式

第一行包含两个空格分隔的整数 $N$ 和 $Q$,分别代表奶牛的数量和查询(记住的值)的数量。 接下来的 $Q$ 行,每行包含两个空格分隔的整数 $c_i\; v_i$,表示奶牛 $c_i$ 最初持有 $v_i$ 个箱子。保证 $c_1 = 1$,$c_Q = N$,并且 $c_i < c_{i+1}$(奶牛的编号是严格递增的)。

输出格式

输出可以分配 $a_i$ 值的方法数量,使得农夫约翰在奶牛执行懒惰排序后感到高兴,结果对 $10^9 + 7$ 取模。保证至少存在一种有效的分配方案。

说明/提示

### 样例 1 解释 在这个例子中,FJ 记住了数组两端的值。数组 $[3, 2, 2]$ 和 $[3, 3, 2]$ 是有效的数组,它们会在懒惰排序结束时让 FJ 高兴。 ### 测试点限制 - 测试点 3-4: $N,v_i\leq 100$; - 测试点 5-6: $N\leq 100$ 且 $v_i\leq 10^6$; - 测试点 7-9: $N\leq 2\times 10^5$ 且 $v_i\leq 10^6$; - 测试点 10-12: $N\leq 2\times 10^5$; - 测试点 13-15: 无额外限制。