#gigacode2019f. [gigacode_2019_f]クローゼットの配置

[gigacode_2019_f]クローゼットの配置

配点: 100100

問題文

ギガコード君は家を買いました.この家は,左右に HH 分割,前後に WW 分割された合計 HtimesWH \\times W 個の区画に分かれています.そのうち左から ii 番目,前から jj 番目のマスを (i,j)(i, j) で表します.

そのうち NN 個の区画には物が置かれています.ii 個目の物は,区画 (ri,ci)(r_i, c_i) 全体を占めています.また,これらの物が動くことはありません.

ギガコード君は,この家にクローゼットを 11 つ設置することにしました.クローゼットは家の外壁に平行な長方形でなければならず,クローゼットのある区画に物が置かれていてはなりません.しかし,地震が起きた時にクローゼットが動くと良くないので,次の条件を満たす置き方のうち 11 つを選ぶことにしました.

  • クローゼットを向きを変えずにどんな方向に動かそうとしても,物や家の外壁に当たって動かせない.

例えば,次のようなクローゼットの配置ができます.

しかし,条件を満たさないクローゼットの配置はできません.

条件を満たすようなクローゼットの配置はいくつあるか求めてください.

制約

  • 1leqHleq50001 \\leq H \\leq 5 \\ 000
  • 1leqWleq50001 \\leq W \\leq 5 \\ 000
  • 0leqNleq2019000 \\leq N \\leq 201 \\ 900
  • 1leqrileqH1 \\leq r_i \\leq H
  • 1leqcileqW1 \\leq c_i \\leq W
  • NN 個の物はすべて異なる区画に置かれている
  • 入力はすべて整数

部分点

この問題はいくつかの小課題に分けられ,その小課題のすべてのテストケースに正解した場合に「この小課題に正解した」とみなされます.
提出したソースコードの得点は,正解した小課題の点数の合計となります.

  1. (2 点) H=1,W=1H = 1, W = 1
  2. (11 点) H=1,Wleq25H = 1, W \\leq 25
  3. (11 点) Hleq25,Wleq25H \\leq 25, W \\leq 25
  4. (19 点) Nleq10N \\leq 10
  5. (16 点) Hleq100,Wleq100H \\leq 100, W \\leq 100
  6. (17 点) Hleq350,Wleq350H \\leq 350, W \\leq 350
  7. (19 点) Hleq1500,Wleq1500H \\leq 1500, W \\leq 1500
  8. (5 点) 追加の制約はない.

入力

入力は以下の形式で標準入力から与えられます.

HH WW NN r1r_1 c1c_1 r2r_2 c2c_2 : : rNr_N cNc_N

出力

地震が起きても動かないようなクローゼットの配置の数を出力してください.

注意

入力のサイズが大きいので、高速な入出力(C++ の場合 scanf/printf など)を使うことが推奨されています.


入力例 1

3 3
2
1 1
3 2

出力例 1

4

この入出力例では,クローゼットを配置する方法は下図のように 44 個ありますので,「44」と出力してください.


入力例 2

1 10
3
1 1
1 5
1 8

出力例 2

3

この入力例は H=1H = 1 なので小課題 22 の制約を満たします.
クローゼットを配置する方法は下図のように 33 個あります.


入力例 3

4 6
6
1 3
4 2
2 1
2 4
3 6
4 5

出力例 3

11

クローゼットを配置する方法は 1111 個あります.自分でも数えてみましょう!


入力例 4

4802 5000
10
254 3330
1713 3331
1712 989
256 988
4192 3521
3602 4991
255 987
3603 3520
256 987
4191 4992

出力例 4

32

この入力例は N=10N = 10 なので小課題 44 の制約を満たします.
小課題 44 には,H,WH, W が大きい場合もあることに注意してください.