import java.util.Arrays;
class Ideone {
private static final int MIN_COUNT = 3;
public static void main
(String[] args
) { int[][] data = { { 74, 85, 123 },
{ 73, 84, 122 },
{ 72, 83, 121 },
{ 70, 81, 119 },
{ 69, 80, 118 },
{ 76, 87, 125 },
{ 77, 88, 126 },
{ 78, 89, 127 } };
// Initialize min collectors
Min[] min = new Min[data[0].length];
for (int col = 0; col < min.length; col++)
min[col] = new Min(MIN_COUNT);
// Collect data
for (int row = 0; row < data.length; row++)
for (int col = 0; col < min.length; col++)
min[col].add(data[row][col]);
// Print result
for (int i = 0; i < MIN_COUNT; i++) {
for (int col = 0; col < min.length; col++)
System.
out.
printf("min%d = %-5d ", i
+ 1, min
[col
].
get(i
)); }
}
}
class Min {
private int[] min;
public Min(int count) {
this.min = new int[count];
}
public void add(int value) {
int idx
= Arrays.
binarySearch(this.
min, value
); if (idx != -this.min.length - 1) { // not insert at end
if (idx < 0)
idx = -idx - 1;
System.
arraycopy(this.
min, idx,
this.
min, idx
+ 1,
this.
min.
length - idx
- 1); this.min[idx] = value;
}
}
public int get(int index) {
return this.min[index];
}
}
aW1wb3J0IGphdmEudXRpbC5BcnJheXM7CgpjbGFzcyBJZGVvbmUgewoJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1JTl9DT1VOVCA9IDM7CglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CgkJaW50W11bXSBkYXRhID0geyB7IDc0LCA4NSwgMTIzIH0sCgkJICAgICAgICAgICAgICAgICB7IDczLCA4NCwgMTIyIH0sCgkJICAgICAgICAgICAgICAgICB7IDcyLCA4MywgMTIxIH0sCgkJICAgICAgICAgICAgICAgICB7IDcwLCA4MSwgMTE5IH0sCgkJICAgICAgICAgICAgICAgICB7IDY5LCA4MCwgMTE4IH0sCgkJICAgICAgICAgICAgICAgICB7IDc2LCA4NywgMTI1IH0sCgkJICAgICAgICAgICAgICAgICB7IDc3LCA4OCwgMTI2IH0sCgkJICAgICAgICAgICAgICAgICB7IDc4LCA4OSwgMTI3IH0gfTsKCQkvLyBJbml0aWFsaXplIG1pbiBjb2xsZWN0b3JzCgkJTWluW10gbWluID0gbmV3IE1pbltkYXRhWzBdLmxlbmd0aF07CgkJZm9yIChpbnQgY29sID0gMDsgY29sIDwgbWluLmxlbmd0aDsgY29sKyspCgkJCW1pbltjb2xdID0gbmV3IE1pbihNSU5fQ09VTlQpOwoJCS8vIENvbGxlY3QgZGF0YQoJCWZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGRhdGEubGVuZ3RoOyByb3crKykKCQkJZm9yIChpbnQgY29sID0gMDsgY29sIDwgbWluLmxlbmd0aDsgY29sKyspCgkJCQltaW5bY29sXS5hZGQoZGF0YVtyb3ddW2NvbF0pOwoJCS8vIFByaW50IHJlc3VsdAoJCWZvciAoaW50IGkgPSAwOyBpIDwgTUlOX0NPVU5UOyBpKyspIHsKCQkJZm9yIChpbnQgY29sID0gMDsgY29sIDwgbWluLmxlbmd0aDsgY29sKyspCgkJCQlTeXN0ZW0ub3V0LnByaW50ZigibWluJWQgPSAlLTVkICIsIGkgKyAxLCBtaW5bY29sXS5nZXQoaSkpOwoJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKCQl9Cgl9Cn0KY2xhc3MgTWluIHsKCXByaXZhdGUgaW50W10gbWluOwoJcHVibGljIE1pbihpbnQgY291bnQpIHsKCQl0aGlzLm1pbiA9IG5ldyBpbnRbY291bnRdOwoJCUFycmF5cy5maWxsKHRoaXMubWluLCBJbnRlZ2VyLk1BWF9WQUxVRSk7Cgl9CglwdWJsaWMgdm9pZCBhZGQoaW50IHZhbHVlKSB7CgkJaW50IGlkeCA9IEFycmF5cy5iaW5hcnlTZWFyY2godGhpcy5taW4sIHZhbHVlKTsKCQlpZiAoaWR4ICE9IC10aGlzLm1pbi5sZW5ndGggLSAxKSB7IC8vIG5vdCBpbnNlcnQgYXQgZW5kCgkJCWlmIChpZHggPCAwKQoJCQkJaWR4ID0gLWlkeCAtIDE7CgkJCVN5c3RlbS5hcnJheWNvcHkodGhpcy5taW4sIGlkeCwgdGhpcy5taW4sIGlkeCArIDEsIHRoaXMubWluLmxlbmd0aCAtIGlkeCAtIDEpOwoJCQl0aGlzLm1pbltpZHhdID0gdmFsdWU7CgkJfQoJfQoJcHVibGljIGludCBnZXQoaW50IGluZGV4KSB7CgkJcmV0dXJuIHRoaXMubWluW2luZGV4XTsKCX0KfQ==