二分探索ドリルのサムネイル
bisect で範囲内の要素数 Bash(Beta)編(paizaランク B 相当)

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

問題

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

あるマラソン大会で N 人のランナーが完走しました。完走した順(タイムが速い順)に記録した完走タイム(秒)を A_1, A_2, ..., A_N とすると、これは昇順に並んだ整数列になります(A_1 ≦ A_2 ≦ ... ≦ A_N)。

整数 L, R (L ≦ R)が与えられます。完走タイムが L 秒以上 R 秒以下だったランナーが何人いるか、Python の bisect_left と bisect_right(C++ では lower_bound と upper_bound)を使って求め、出力してください。

bisect_right(A, R) は「R より大きい値が最初に現れる位置」を返し、bisect_left(A, L) は「L 以上の値が最初に現れる位置」を返します。この 2 つの位置の差が、L 以上 R 以下だったランナーの人数になります。

入力される値

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

N L R
A_1 A_2 ... A_N


・1 行目には整数 N, L, R が空白区切りで与えられます。

・2 行目には N 人のランナーの完走タイム A_1, A_2, ..., A_N が空白区切りで与えられます。A は完走した順(タイムが速い順)、つまり昇順に並んでいます。

・入力は合計で 2 行からなり、入力値最終行の末尾に改行が 1 つ入ります。


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

完走タイムが L 秒以上 R 秒以下だったランナーの人数を 1 行に出力してください。出力の最後は改行し、余計な文字、空行を含んではいけません。

条件

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

・1 ≦ N ≦ 10000

・1 ≦ A_i ≦ 1000000000

・1 ≦ L ≦ R ≦ 1000000000

・A は昇順に並んでいる(A_1 ≦ A_2 ≦ ... ≦ A_N)

入力例1

6 135 170
120 135 135 150 170 190

出力例1

4

入力例2

5 200 210
100 120 150 180 190

出力例2

0

問題一覧へ戻る

  1. paizaトップ
  2. レベルアップ問題集
  3. 二分探索ドリル(言語選択)
  4. 問題一覧 Bash(Beta)編
  5. bisect で範囲内の要素数 Bash(Beta)編
ページの先頭へ戻る