Problem:
問題 2: 　投票 (Vote)

問題

20XX年に東京で世界的なスポーツ大会が開かれることになった．プログラミングコンテストはスポーツとして世界で楽しまれており，競技として採用される可能性がある．採用される競技を決める審査委員会について調べたところ，次のようなことが分かった．

審査委員会のために，候補となる N 個の競技を面白い方から順番に並べたリストが作成された．リストの上から i 番目には i 番目に面白い競技が書かれている．それを競技 i とする．さらに競技 i の開催に必要な費用 Ai が書かれている．

また，審査委員会は委員 1 から委員 M までの M 人の委員で構成されている．委員 j は自分の審査基準 Bj をもっており，開催に必要な費用が Bj 以下の競技のうち最も面白いものに 1 票を投票した．

どの委員の審査基準に対しても，少なくとも 1 つの競技は開催に必要な費用が審査基準以下であった．したがって，委員は全員 1 票を投票した．

最も多く票を獲得した競技は 1 つだけであった．

競技のリストと委員の情報が与えられたとき，最も多く票を獲得した競技の番号を求めるプログラムを作成せよ．

入力

入力は 1 + N + M 行からなる．

1 行目には整数 N, M (1 ≤ N ≤ 1000，1 ≤ M ≤ 1000) が書かれており，それぞれ競技の数，委員の数を表す．

続く N 行のうちの i 行目 (1 ≤ i ≤ N) には整数 Ai (1 ≤ Ai ≤ 1000) が書かれており， 競技 i の開催に必要な費用 Ai を表す．

続く M 行のうちの j 行目 (1 ≤ j ≤ M) には整数 Bj (1 ≤ Bj ≤ 1000) が書かれており，委員 j の審査基準 Bj を表す．

与えられる入力データにおいては，どの委員も必ず 1 票を投票し，最も多く票を獲得した競技は 1 つであることが保証されている．

出力

最も多く票を獲得した競技の番号を 1 行で出力せよ．

入出力例

入力例 1

4 3
5
3
1
4
4
3
2

出力例 1

2

入出力例 1 では，競技は 4 つあり，委員は 3 人いる．リストの 4 つの競技にかかる費用はそれぞれ 5, 3, 1, 4 である．

委員 1 の審査基準は 4 である．費用が 4 以下の競技のうち最も面白いものは競技 2 である．

委員 2 の審査基準は 3 である．費用が 3 以下の競技のうち最も面白いものは競技 2 である．

委員 3 の審査基準は 2 である．費用が 2 以下の競技のうち最も面白いものは競技 3 である．

よって，競技 2 が 2 票，競技 3 が 1 票を獲得する．最も多く票を獲得した競技は競技 2 であるので，2 を出力する．

入力例 2

6 6
3
1
4
1
5
9
2
6
5
3
5
9

出力例 2

1

入出力例 2 では，競技 1 が 5 票，競技 2 が 1 票を獲得する．最も多く票を獲得した競技は競技 1 なので，1 を出力する．

問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。

Solution in JAVA (judge verdict: Accepted)

import java.util.Comparator;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.TreeMap;
import java.util.stream.IntStream;

public class Main{
	static final Scanner s=new Scanner(System.in);
	static IntStream REPS(int v){return IntStream.range(0,v);}
	static IntStream REPS(int l,int r){return IntStream.rangeClosed(l,r);}
	static IntStream INS(int n){return REPS(n).map(i->getInt());}
	static int getInt(){return Integer.parseInt(s.next());}
	public static void main(String[]$){
		int n=getInt(),m=getInt();
		TreeMap<Integer,Integer>t=new TreeMap<>();//<cost,no>
		HashMap<Integer,Integer>r=new HashMap<>();//<  no,vote>
		REPS(n).forEach(i->t.merge(getInt()-1,i+1,Math::min));
		INS(m)
		.mapToObj(t::headMap)
		.map(o->o.values().stream()
				.min(Comparator.naturalOrder())
				.get())
		.forEach(i->r.merge(i,1,Integer::sum));
		System.out.println(
				r.entrySet().stream()
				.max(Entry.comparingByValue())
				.get()
				.getKey());
	}
}