/* package whatever; // don't place package name! */
import java.io.*;
import java.util.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
int[][] input = new int[][] {
{1, 2, 3, 4},
{8, 9, 10, 11},
{33, 44, 55, 66},
{99, 150, 170, 200}
};
for (int i = 1; i <= 16; i ++) {
System.
out.
println(findkthLargestElement
(input, i,
4,
4)); }
}
public static int findkthLargestElement(int[][] input, int k, int m, int n) {
if (m <=1 || n <= 1 || k > m * n ) {
}
int i = 0;
int j = 0;
if (k < m && k < n) {
i = m - k;
j = n - k;
}
PriorityQueue<Element> maxQueue = new PriorityQueue(m, new Comparator<Element>() {
@Override
return b.value - a.value;
}
});
for (int row = i; row < m; row++) {
colMap.put(row, n - 1);
maxQueue.add(e);
}
for (int l = 0; l < k; l++) {
largest = maxQueue.poll();
int row = largest.row;
colMap.put(row, colMap.get(row) - 1);
int col = colMap.get(row);
while (col < j && row > i) {
row = row - 1;
colMap.put(row, colMap.get(row) - 1);
col
= Math.
max(0, colMap.
get(row
)); }
maxQueue.add(nextLargest);
}
return largest.value;
}
int value;
int row;
int col;
public Element(int value,
int row,
int col
) { this.value = value;
this.row = row;
this.col = col;
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEuaW8uKjsKaW1wb3J0IGphdmEudXRpbC4qOwoKLyogTmFtZSBvZiB0aGUgY2xhc3MgaGFzIHRvIGJlICJNYWluIiBvbmx5IGlmIHRoZSBjbGFzcyBpcyBwdWJsaWMuICovCmNsYXNzIElkZW9uZQp7CglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KCXsKCQlpbnRbXVtdIGlucHV0ID0gbmV3IGludFtdW10gewogICAgICAgICAgICAgICAgezEsICAgMiwgICAzLCAgICA0fSwKICAgICAgICAgICAgICAgIHs4LCAgIDksICAgMTAsICAxMX0sCiAgICAgICAgICAgICAgICB7MzMsIDQ0LCAgIDU1LCAgNjZ9LAogICAgICAgICAgICAgICAgezk5LCAxNTAsIDE3MCwgMjAwfQogICAgICAgIH07CiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gMTY7IGkgKyspIHsKICAgICAgICAJU3lzdGVtLm91dC5wcmludGxuKGZpbmRrdGhMYXJnZXN0RWxlbWVudChpbnB1dCwgaSwgNCwgNCkpOwkKICAgICAgICB9CiAgICAgICAgCgl9CgoJcHVibGljIHN0YXRpYyBpbnQgZmluZGt0aExhcmdlc3RFbGVtZW50KGludFtdW10gaW5wdXQsIGludCBrLCBpbnQgbSwgaW50IG4pIHsKICAgICAgICBpZiAobSA8PTEgfHwgbiA8PSAxIHx8IGsgPiBtICogbiApIHsKICAgICAgICAgICAgcmV0dXJuIEludGVnZXIuTUlOX1ZBTFVFOwogICAgICAgIH0KICAgICAgICBpbnQgaSA9IDA7CiAgICAgICAgaW50IGogPSAwOwogICAgICAgIGlmIChrIDwgbSAmJiBrIDwgbikgewogICAgICAgICAgICBpID0gbSAtIGs7CiAgICAgICAgICAgIGogPSBuIC0gazsKICAgICAgICB9CiAgICAgICAgUHJpb3JpdHlRdWV1ZTxFbGVtZW50PiBtYXhRdWV1ZSA9IG5ldyBQcmlvcml0eVF1ZXVlKG0sIG5ldyBDb21wYXJhdG9yPEVsZW1lbnQ+KCkgewogICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgcHVibGljIGludCBjb21wYXJlKEVsZW1lbnQgYSwgRWxlbWVudCBiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYi52YWx1ZSAtIGEudmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCgkJTWFwPEludGVnZXIsIEludGVnZXI+IGNvbE1hcCA9IG5ldyBIYXNoTWFwPEludGVnZXIsIEludGVnZXI+KCk7CiAgICAgICAgZm9yIChpbnQgcm93ID0gaTsgcm93IDwgbTsgcm93KyspIHsKICAgICAgICAgICAgRWxlbWVudCBlID0gbmV3IEVsZW1lbnQoaW5wdXRbcm93XVtuIC0gMV0sIHJvdywgbiAtIDEpOwogICAgICAgICAgICBjb2xNYXAucHV0KHJvdywgbiAtIDEpOwogICAgICAgICAgICBtYXhRdWV1ZS5hZGQoZSk7CiAgICAgICAgfQogICAgICAgIEVsZW1lbnQgbGFyZ2VzdCA9IG5ldyBFbGVtZW50KDAsIDAsIDApOwogICAgICAgIGZvciAoaW50IGwgPSAwOyBsIDwgazsgbCsrKSB7CiAgICAgICAgICAgIGxhcmdlc3QgPSBtYXhRdWV1ZS5wb2xsKCk7CiAgICAgICAgICAgIGludCByb3cgPSBsYXJnZXN0LnJvdzsKICAgICAgICAgICAgY29sTWFwLnB1dChyb3csIGNvbE1hcC5nZXQocm93KSAtIDEpOwogICAgICAgICAgICBpbnQgY29sID0gY29sTWFwLmdldChyb3cpOwogICAgICAgICAgICB3aGlsZSAoY29sIDwgaiAmJiByb3cgPiBpKSB7CiAgICAgICAgICAgICAgICByb3cgPSByb3cgLSAxOwogICAgICAgICAgICAgICAgY29sTWFwLnB1dChyb3csIGNvbE1hcC5nZXQocm93KSAtIDEpOwogICAgICAgICAgICAgICAgY29sID0gTWF0aC5tYXgoMCwgY29sTWFwLmdldChyb3cpKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgRWxlbWVudCBuZXh0TGFyZ2VzdCA9IG5ldyBFbGVtZW50KGlucHV0W3Jvd11bTWF0aC5tYXgoMCwgY29sKV0sIHJvdywgTWF0aC5tYXgoMCwgY29sKSk7CiAgICAgICAgICAgIG1heFF1ZXVlLmFkZChuZXh0TGFyZ2VzdCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsYXJnZXN0LnZhbHVlOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEVsZW1lbnQgewogICAgICAgIGludCB2YWx1ZTsKICAgICAgICBpbnQgcm93OwogICAgICAgIGludCBjb2w7CgogICAgICAgIHB1YmxpYyBFbGVtZW50KGludCB2YWx1ZSwgaW50IHJvdywgaW50IGNvbCkgewogICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7CiAgICAgICAgICAgIHRoaXMucm93ID0gcm93OwogICAgICAgICAgICB0aGlzLmNvbCA9IGNvbDsKICAgICAgICB9CiAgICB9Cn0KCg==