セグメント木メニューのサムネイル
(問題 4)Segment Treeの構築4 : 単位元について Rust(Beta)編(paizaランク C 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

問題

下記の問題をプログラミングしてみよう!

(はじめに)

ここでは、問題 3 ででてきた単位元について勉強していきます。

ある集合 S と任意の 2 つの要素 e_1,e_2 ∈ S に対して、ある演算 f(e_1,e_2) ∈ S を考えます。

そのとき、単位元 e ∈ S では以下が成り立ちます。

  • 任意の要素 e_1 ∈ S に対し、f(e_1,e) = f(e,e_1) = e_1


  • 例えば、S = {0,1,2,...,10 ^ 6}, f(e_1,e_2) = max(e_1,e_2) について考えてみましょう。

    このとき、最小の S の要素は 0 であるため、任意の e_1 ∈ S に対して、f(0,e_1) = f(e_1,0) = e_1 が成り立ちます。よって、この集合と演算における単位元は 0 です。

    他の演算についても考えてみましょう。

    (Tips) なぜここで単位元に触れたかというと、Segment Treeで行える演算には以下の制限があります。

  • 結合法則が成り立つこと

  • 単位元が存在すること


  • 実際にSegment Treeを使う際には、上記のことに気を付けて使えるか判断しなくてはいけません。

    (問題)

    以下の演算について、それぞれ単位元を求めてください。

    1.演算Add: S は実数全体, f(e_1,e_2) = e_1 + e_2

    2.演算Mul: S は実数全体, f(e_1,e_2) = e_1 × e_2

    3.演算Max: S は 0 以上 10^9 以下の実数, f(e_1,e_2) = max(e_1,e_2)

    4.演算Min: S は 0 以上 10^9 以下の実数, f(e_1,e_2) = min(e_1,e_2)

    入力される値

    入力は以下のフォーマットで与えられます。


    op


    1 行目には 1 つの整数 op が与えられます。

    入力は合計 1 行からなり、入力値最終行の末尾に改行を 1 つ含みます。


    入力値最終行の末尾に改行が1つ入ります。
    文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください
    期待する出力

    答えを 1 行で出力してください。

    op が 1 なら Add の単位元を、2 なら Mul の単位元を、3 なら Max の単位元を、4 なら Min の単位元を出力してください。

    ただし、出力すべきものは全て整数であるので、整数で出力してください。

    条件

    すべてのテストケースについて以下の条件を満たします。

  • 1 ≦ op ≦ 4
  • 問題一覧へ戻る

    1. paizaラーニングトップ
    2. レベルアップ問題集
    3. セグメント木メニュー(言語選択)
    4. 問題一覧 Rust(Beta)編
    5. (問題 4)Segment Treeの構築4 : 単位元について Rust(Beta)編
    ページの先頭へ戻る