/* package whatever; // don't place package name! */ import java.util.*; import java.lang.*; import java.io.*; /* Name of the class has to be "Main" only if the class is public. */ class Ideone { int N = rand.nextInt(20) + 10; int[][] arr = new int[N][]; for (int i = 0; i < N; i++) { int m = rand.nextInt(10) + 5; if (i % 2 != m % 2) m++; arr[i] = new int[m]; for (int j = 0; j < m; j++) { arr[i][j] = rand.nextInt(100); } } int P = 4; int[][] ps = new int[P][]; int size = 0; for (int i = 0; i < P; i++) { ps[i] = arr[rand.nextInt(arr.length)]; size += ps[i].length; for (int p : ps[i]) { } } Heap heap = new Heap(P); for (int i = 0; i < P; i++) { heap.push(ps[i]); } do { } while (heap.pop()); int[] es = new int[size]; for (int i = 0, j = 0; i < P; i++) { for (int p : ps[i]) { es[j] = p; j++; } } for (int e : es) { } } static class Slice { int[] ref; int index, endIndex; Slice(int[] r) { ref = r; index = 0; endIndex = r.length; } int len() { return endIndex - index; } int get() { return ref[index]; } boolean next() { index++; return index < endIndex; } } static class Heap { Slice[] buf; int index = 0; Heap(int len) { buf = new Slice[len]; } void push(int[] arr) { buf[index] = new Slice(arr); up(index); index++; } int peek() { return buf[0].get(); } boolean pop() { if (!buf[0].next()) { buf[0] = buf[index-1]; buf[index-1] = null; index--; if (index == 0) return false; } down(0); return true; } void swap(int i, int j) { Slice tmp = buf[i]; buf[i] = buf[j]; buf[j] = tmp; } void up(int i) { if (i == 0) { down(0); return; } int j = (i - 1) >> 1; if (buf[i].get() < buf[j].get()) { swap(i, j); up(j); } else { down(i); } } void down(int i) { int k = (i + 1) << 1; int j = k - 1; if (j >= buf.length) return; if (buf[j] == null) return; if (k < buf.length && buf[k] != null) { if (buf[j].get() < buf[k].get()) { if (buf[j].get() < buf[i].get()) { swap(j, i); down(j); } } else if (buf[k].get() < buf[i].get()) { swap(k, i); down(k); } } else if (buf[j].get() < buf[i].get()) { swap(j, i); down(j); } } } }
Standard input is empty
[0, 0, 6, 35, 41, 63, 64, 73, 86, 86, ], [18, 20, 34, 39, 51, 53, 55, 57, 59, 66, 79, 83, 92, ], [18, 20, 34, 39, 51, 53, 55, 57, 59, 66, 79, 83, 92, ], [5, 23, 28, 28, 30, 33, 36, 43, 46, 80, 90, 98, ], 0, 0, 5, 6, 18, 18, 20, 20, 23, 28, 28, 30, 33, 34, 34, 35, 36, 39, 39, 41, 43, 46, 51, 51, 53, 53, 55, 55, 57, 57, 59, 59, 63, 64, 66, 66, 73, 79, 79, 80, 83, 83, 86, 86, 90, 92, 92, 98, 0, 0, 5, 6, 18, 18, 20, 20, 23, 28, 28, 30, 33, 34, 34, 35, 36, 39, 39, 41, 43, 46, 51, 51, 53, 53, 55, 55, 57, 57, 59, 59, 63, 64, 66, 66, 73, 79, 79, 80, 83, 83, 86, 86, 90, 92, 92, 98,