atcoder#ABC222D. [ABC222D] Between Two Arrays

[ABC222D] Between Two Arrays

配点 : 400400

問題文

長さ nn の数列 S=(s1,s2,,sn)S = (s_1, s_2, \dots, s_n) がすべての ii (1in1)(1 \leq i \leq n - 1) に対して sisi+1s_i \leq s_{i+1} を満たすとき、かつそのときに限り「数列 SS は広義単調増加である」と呼びます。

広義単調増加な長さ NN の整数列 $A = (a_1, a_2, \dots, a_N), B = (b_1, b_2, \dots, b_N)$ が与えられます。 このとき、次の条件を満たす広義単調増加な長さ NN の整数列 C=(c1,c2,,cN)C = (c_1, c_2, \dots, c_N) を考えます。

  • すべての ii (1iN)(1 \leq i \leq N) に対して aicibia_i \leq c_i \leq b_i が成り立つ。

整数列 CC としてあり得る数列の個数を 998244353998244353 で割ったあまりを求めてください。

制約

  • 1N30001 \leq N \leq 3000
  • 0aibi30000 \leq a_i \leq b_i \leq 3000 (1iN)(1 \leq i \leq N)
  • 整数列 A,BA,B は広義単調増加である。
  • 入力はすべて整数である。

入力

入力は以下の形式で標準入力から与えられる。

NN

a1a_1 a2a_2 \dots aNa_N

b1b_1 b2b_2 \dots bNb_N

出力

CC としてあり得る数列の個数を 998244353998244353 で割ったあまりを出力せよ。

2
1 1
2 3
5

CC としてあり得る数列は次の 55 個です。

  • (1,1)(1, 1)
  • (1,2)(1, 2)
  • (1,3)(1, 3)
  • (2,2)(2, 2)
  • (2,3)(2, 3)

数列 (2,1)(2, 1) は広義単調増加でないため条件を満たさないことに注意してください。

3
2 2 2
2 2 2
1

CC としてあり得る数列は次の 11 個です。

  • (2,2,2)(2, 2, 2)
10
1 2 3 4 5 6 7 8 9 10
1 4 9 16 25 36 49 64 81 100
978222082

個数を 998244353998244353 で割ったあまりを求めることに注意してください。