23JOIG春合宿1-1 - Rocket Launching

問題リンク: https://atcoder.jp/contests/joigsp2023/tasks/joigsp2023_a

$${A, B}$$を整数からなる多重集合とします。突然ですが、次のクエリをオンラインで処理することを考えます($${x, h, t}$$はクエリで与えられます)。

  • クエリ 1 : $${A}$$に$${x}$$を追加する。

  • クエリ 2 : $${A}$$から$${x}$$を削除し、$${B}$$に$${h}$$を追加する。ただし、$${x\in A}$$が保証される。

  • クエリ 3 : $${\max(t-\min A, \max B)}$$を返答する。

$${(X_i, 1, i), (X_i+H_i, 2, i), (T_j, 3, j)\ (1\le i\le N, 1\le j\le Q)}$$をすべて含んだ配列を辞書順にソートします。この配列を先頭から走査して、

  • 2 番目の要素が 1 ならば、$${x=X_i}$$としてクエリ 1 を処理する。

  • 2 番目の要素が 2 ならば、$${x=X_i, h=H_i}$$としてクエリ 2 を処理する。

  • 2 番目の要素が 3 ならば、$${t=T_j}$$としてクエリを処理する。特に、返答は$${j}$$行目に出力すべき値となる。

提出コード: https://atcoder.jp/contests/joigsp2023/submissions/49234897

おきもち

$${j}$$行目に出力する値は$${f(t, i)}$$の最大値です。ここで、$${f(t, i)}$$は次の条件をすべて満たす関数です。

  • $${t\in (-\infty, X_i)\implies f(t, i) = 0}$$

  • $${t\in [X_i, X_i+H_i]\implies f(t, i) = t-X_i}$$

  • $${t\in (X_i+H_i, \infty)\implies f(t, i) = H_i}$$

なので$${t\in [X_i, X_i+H_i]}$$となるような$${X_i}$$の最小値と、$${t\in (X_i+H_i, \infty)}$$となるような$${H_i}$$の最大値が分かるとうれしいです。適当な考察を重ねると$${X_i, X_i+H_i, T_j}$$でイベントソートをしたくなります。

この記事が気に入ったらサポートをしてみませんか?