(問題 4)Segment Treeの構築4 : 単位元について Kotlin編(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
問題一覧へ戻る