public static List<Integer> getRandomBitonicList() {
        List<Integer> bitonicList = new ArrayList<>();
        List<Integer> list = new ArrayList<>();
        Set<Integer> set = new HashSet<>();
        int n = 5000, r = 10000;
        while (list.size() < n) {
            final int uniform = StdRandom.uniform(r);
            if (!set.contains(uniform)) {
                set.add(uniform);
                list.add(uniform);
            }
        }
        checkNoRepeat(list);
        Collections.sort(list);
        for (Integer v : list) {
            if (StdRandom.bernoulli()) {
                bitonicList.add(v);
            }
        }
        checkNoRepeat(bitonicList);
        int ascend = bitonicList.size() - 1;
        int descent = list.size() - 1;
        if (ascend > 0) {
            descent = list.indexOf(bitonicList.get(ascend));
        }

        for (int i = descent - 1; i >= 0; i--) {
            if (StdRandom.bernoulli()) {
                bitonicList.add(list.get(i));
            }
        }
        return bitonicList;
    }