アットウィキロゴ
競技プログラミング用 知識集積所
掲示板 掲示板 ページ検索 ページ検索 メニュー メニュー

競技プログラミング用 知識集積所

ABC455D - Card Pile Query

最終更新:

sport_programming

- view
管理者のみ編集可


問題


必要知識

B以下レベルの内容は省略
  • 逆写像※っぽいもの(全射でないので厳密にはそうではないのだが)

考え方

複雑なことをしているようで、実はそうでもない。
クエリで「X Y」が来た場合、XがYの上に乗る。
その後クエリがたくさん来たとして、「X 何か」というクエリが来ない限り、XがYの上にあるという関係は実は壊れることがない。
ということで、「最終的に何の下に何があるか」はクエリを見て単純に情報を書き換えていくだけでよい。
このとき、-1などで初期化することで、下には何もない(最初から一度も動いていない)情報も残すことができる。

解答には「最終的に何の下に何があるか」が欲しいのだが、これも実は簡単である。
「最終的に1の下に4がある」なら、「最終的に4の上に1がある」わけで、逆写像※に近い考え方を用いて構成できる。

それらを全て作ったら、各i番について、
  • i番の下に何かあるなら、i番の山は空っぽになっているので答えは0
  • i番の下に何もないなら、i番のカードの上、その上、さらに上、と上のカードがなくなるまで辿って枚数を数える
を実行することで答えが出る。
この部分の計算量は、各カード最大2度しか見ないので、O(N)である。

解答例


注意点


別解

タグ:

逆写像
最近更新されたスレッド
ウィキ募集バナー