import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.*;
import static java.util.stream.Collectors.*;
public class algo {
public static void main(String[] args) {
String[] genres = {"classic", "pop", "classic", "classic", "pop"};
int[] plays = {500, 600, 150, 800, 2500};
solution(genres, plays);
}
public static class Music implements Comparable<Music> {
private String genre;
private int played;
private int id;
public Music(String genre, int played, int id) {
this.genre = genre;
this.played = played;
this.id = id;
}
@Override
public int compareTo(Music o) {
if (this.played == o.played) return this.id - o.id;
return o.played - this.played;
}
public String getGenre() {
return genre;
}
}
private static int sum(List<Music> value) {
int answer = 0;
for (Music music : value) {
answer+=music.played;
}
return answer;
}
public static int[] solution(String[] genres, int[] plays) {
return IntStream.range(0, genres.length)
.mapToObj(i -> new Music(genres[i], plays[i], i))
.collect(Collectors.groupingBy(Music::getGenre))
.entrySet().stream()
.sorted((a, b) -> sum(b.getValue()) - sum(a.getValue()))
.flatMap(x -> x.getValue().stream().sorted().limit(2))
.mapToInt(x -> x.id).toArray();
}
}