#P1990. contest1 C 路径统计(hard version)

contest1 C 路径统计(hard version)

题目描述

本题和 easy version 的唯一区别就是 k 的范围不同

小 i 来到了一个 n imesmn \ imes m 的棋盘上,小 ii 想要从棋盘的最左上角(第 11 行第 11 列)走到棋盘的最右下角(第 nn 行第 mm 列),受到某种神奇的力量的影响,小 i 只能向右或者向下走,我们用 (x,y)(x, y) 来表示第 xx 行第 yy 列,那么小 i 位于坐标 (x,y)(x, y) 时下一步可以走到 (x+1,y)(x + 1, y) 或者 (x,y+1)(x, y + 1),小 i 想知道他从起点走到终点的方案数是多少。

这个问题真是太简单了!所以小 i 给自己设立了一些限制,小 i 规定棋盘上有一些格子是自己不能走的,小 i 想知道在这种情况下他从起点走到终点的方案数是多少。

由于答案可能很大,只需要输出答案对 109+710^9 + 7 取模后的结果。

输入格式

第一行包含三个整数 n,m,kn, m, k 分别代表棋盘行数,棋盘列数和小 i 不能走的格子数量。

接下来包含 kk 行,每行两个整数 r,wr, w 代表小 i 不能经过第 rr 行第 ww 列的格子。

1leqn,mleq1051 \\leq n, m \\leq 10^5

0leqkleq1030 \\leq k \\leq 10^3

1leqrleqn,1leqwleqm1 \\leq r \\leq n, 1 \\leq w \\leq m

数据保证不能通行的点不包括起点和终点,并且各不相同。

输出格式

输出包含一个整数代表答案对 109+710^9 + 7 取模后的结果。

样例

5 6 1 
2 2
56
5 6 2 
1 3 
3 1
70
100000 100000 0 

691090292