Upgrade to Pro — share decks privately, control downloads, hide ads and more …

門松と魔法(2) 解説 / yukicoder-no-284

camypaper
November 07, 2017
100

門松と魔法(2) 解説 / yukicoder-no-284

camypaper

November 07, 2017
Tweet

Transcript

  1. 方針(1): どうやって答えを求める? • 最長増加部分列の亜種っぽい? – DPでできそう – 状態は? • 求めたい列を最長門松部分列と呼ぶことにする

    – この数列は右端と右から2番目の高さによって状態が決まる • 右端の高さをr ,右から2番目の高さがmのときの, 最長門松部分列の長さをdp[m][r]としたとき で表せる   ) , , ( | 1 ] ][ [ max ] ][ [ m r l or m r l and r l m l dp r m dp     
  2. 方針(1): どうやって答えを求める? • ジグザグしている特徴があったことを考えると 増加してるときと減少してるときを分けてよさそう • m<rのときをinc[m][r],m>rのときをdec[m][r]で 管理することにすると で表せる。 •

    これは – 間に合わない     ) , ( | 1 ] ][ [ max ] ][ [ ) , ( | 1 ] ][ [ max ] ][ [ m r l and r l m l inc r m dec m r l and r l m l dec r m inc         ) ( 3 N O
  3. 方針(3): さらに状態を減らせる? • mを全て見る必要はある? • ここでlを無視して先ほどの式を眺める    

           m r b a otherwise m b dec r a m a dec r m inc , , ) ( 1 ] ][ [ ) ( 1 ] ][ [ max ] ][ [
  4. 方針(3): さらに状態を減らせる? • mを全て見る必要はある? • ここでlを無視して先ほどの式を眺める    

           m r b a otherwise m b dec r a m a dec r m inc , , ) ( 1 ] ][ [ ) ( 1 ] ][ [ max ] ][ [
  5. 方針(3): さらに状態を減らせる? • mを全て見る必要はある? • ここでlを無視して先ほどの式を眺める • これはRMQ(Range Maximum Query)

               m r b a otherwise m b dec r a m a dec r m inc , , ) ( 1 ] ][ [ ) ( 1 ] ][ [ max ] ][ [
  6. 想定解法: セグメント木のノード • イメージ L1 l1 m1 L2 l2 m1

    L2 l2 m2 L4 l4 m2 L1 l1 m1 L4 l4 m2 親ノードはlが異なりLを最大化 するように,子ノードから値を もらう 4 1 4 1 L L and l l   2 1 2 1 L L and l l   4 3 4 3 L L and l l  
  7. 想定解法: セグメント木のノード • イメージ L1 l1 m1 L2 l2 m1

    L2 l2 m2 L4 l4 m2 L1 l1 m1 L4 l4 m2 親ノードはlが異なりLを最大化 するように,子ノードから値を もらう 基本的には配列がセグメント木になっただけ!!! 4 1 4 1 L L and l l   2 1 2 1 L L and l l   4 3 4 3 L L and l l  