atcoder#ABC158F. [ABC158F] Removing Robots

[ABC158F] Removing Robots

配点 : 600600

問題文

数直線上に、11 から NN の番号のついた NN 個のロボットが置かれています。ロボット ii は座標 XiX_i に存在し、起動すると DiD_i だけ正の方向に移動し、移動を終えると同時に数直線上から取り除かれます。全てのロボットの移動速度は同じで、大きさは無視できます。

イタズラ好きの高橋君は、数直線上にロボットが残っている限り、好きなだけ以下の操作を行うことができます。(11 回も行わないことも可能です)

  • ロボットを 11 つ選び起動する。移動中のロボットが存在するときは行えない。

ロボット ii が移動する過程で、数直線上の座標 XiX_i 以上 Xi+DiX_i + D_i 未満の範囲に残っている別のロボット jj と接触したら、ロボット jj も起動されて移動を開始します。この処理は再帰的に繰り返されます。

高橋君が操作を繰り返した後、数直線上に残っているロボットの組み合わせとして考えられるものは何通り存在するでしょうか。答えは非常に大きくなる場合があるので、998244353998244353 で割った余りを出力してください。

制約

  • 1N2×1051 \leq N \leq 2 \times 10^5
  • 109Xi109-10^9 \leq X_i \leq 10^9
  • 1Di1091 \leq D_i \leq 10^9
  • XiXj(ij)X_i \neq X_j (i \neq j)
  • 入力は全て整数である

入力

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

NN

X1X_1 D1D_1

::

XNX_N DND_N

出力

数直線上に残っているロボットの組み合わせとして考えられるものの個数を 998244353998244353 で割った余りを出力せよ。

2
1 5
3 3
3

数直線上に残っているロボットの組み合わせとしては、{1,2},{1},{}\{1, 2\}, \{1\}, \{\}33 通りが考えられます。

これらは次のように操作すると実現されます。

  • 高橋君はロボットを起動しない。このとき、ロボット {1,2}\{1, 2\} が残ります。
  • 高橋君がロボット 11 を起動する。このとき、ロボット 11 が移動する過程でロボット 22 を起動します。最終的にロボットは 11 つも残っていません。もしくは、高橋君がロボット 22 を起動した後ロボット 11 を起動しても、ロボットが残っていない状態にすることができます。
  • 高橋君がロボット 22 を起動し、操作を終了する。このとき、ロボット {1}\{1\} が残ります。
3
6 5
-1 10
3 3
5

数直線上に残っているロボットの組み合わせとしては、{1,2,3},{1,2},{2},{2,3},{}\{1, 2, 3\}, \{1, 2\}, \{2\}, \{2, 3\}, \{\}55 通りが考えられます。

4
7 10
-10 3
4 3
-4 3
16

どのロボットも他のロボットに影響しません。

20
-8 1
26 4
0 5
9 1
19 4
22 20
28 27
11 8
-3 20
-25 17
10 4
-18 27
24 28
-11 19
2 27
-2 18
-1 12
-24 29
31 29
29 7
110

組み合わせとして考えられるものの個数を 998244353998244353 で割った余りを出力することに注意してください。