/* 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[][] array = {{1, 2, 3},
{2, 3, 1},
{3, 1, 2}};
Stack<Integer> stack = new Stack<Integer>(); // stores the index only
int[][] output = new int[array.length][array[0].length];
for (int i = array.length-1; i >= 0; i--) // direction not important
{
stack.clear();
for (int j = array[0].length-1; j >= 0; j--)
{
while (!stack.empty() && array[i][stack.peek()] < array[i][j])
stack.pop();
int offset;
if (stack.empty())
offset = array[0].length;
else
offset = stack.peek();
output[i][j] = offset - j - 1;
stack.push(j);
}
}
for (int i = array[0].length-1; i >= 0; i--) // direction not important
{
stack.clear();
for (int j = array.length-1; j >= 0; j--)
{
while (!stack.empty() && array[stack.peek()][i] < array[j][i])
stack.pop();
int offset;
if (stack.empty())
offset = array.length;
else
offset = stack.peek();
output[j][i] += offset - j - 1;
stack.push(j);
}
}
for (int i = 0; i < array.length; i++)
for (int j = 0; j < array[0].length; j++)
output[i][j] += 1;
for (int[] a: output)
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCWludFtdW10gYXJyYXkgPSB7ezEsIDIsIDN9LAoJCQkJCQkgezIsIDMsIDF9LAoJCQkJCQkgezMsIDEsIDJ9fTsKCQlTdGFjazxJbnRlZ2VyPiBzdGFjayA9IG5ldyBTdGFjazxJbnRlZ2VyPigpOyAvLyBzdG9yZXMgdGhlIGluZGV4IG9ubHkKCQlpbnRbXVtdIG91dHB1dCA9IG5ldyBpbnRbYXJyYXkubGVuZ3RoXVthcnJheVswXS5sZW5ndGhdOwoJCWZvciAoaW50IGkgPSBhcnJheS5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pIC8vIGRpcmVjdGlvbiBub3QgaW1wb3J0YW50CgkJewoJCQlzdGFjay5jbGVhcigpOwoJCQlmb3IgKGludCBqID0gYXJyYXlbMF0ubGVuZ3RoLTE7IGogPj0gMDsgai0tKQoJCQl7CgkJCQl3aGlsZSAoIXN0YWNrLmVtcHR5KCkgJiYgYXJyYXlbaV1bc3RhY2sucGVlaygpXSA8IGFycmF5W2ldW2pdKQoJCQkJCXN0YWNrLnBvcCgpOwoJCQkJaW50IG9mZnNldDsKCQkJCWlmIChzdGFjay5lbXB0eSgpKQoJCQkJCW9mZnNldCA9IGFycmF5WzBdLmxlbmd0aDsKCQkJCWVsc2UKCQkJCQlvZmZzZXQgPSBzdGFjay5wZWVrKCk7CgkJCQlvdXRwdXRbaV1bal0gPSBvZmZzZXQgLSBqIC0gMTsKCQkJCXN0YWNrLnB1c2goaik7CgkJCX0KCQl9CgkJCgkJZm9yIChpbnQgaSA9IGFycmF5WzBdLmxlbmd0aC0xOyBpID49IDA7IGktLSkgLy8gZGlyZWN0aW9uIG5vdCBpbXBvcnRhbnQKCQl7CgkJCXN0YWNrLmNsZWFyKCk7CgkJCWZvciAoaW50IGogPSBhcnJheS5sZW5ndGgtMTsgaiA+PSAwOyBqLS0pCgkJCXsKCQkJCXdoaWxlICghc3RhY2suZW1wdHkoKSAmJiBhcnJheVtzdGFjay5wZWVrKCldW2ldIDwgYXJyYXlbal1baV0pCgkJCQkJc3RhY2sucG9wKCk7CgkJCQlpbnQgb2Zmc2V0OwoJCQkJaWYgKHN0YWNrLmVtcHR5KCkpCgkJCQkJb2Zmc2V0ID0gYXJyYXkubGVuZ3RoOwoJCQkJZWxzZQoJCQkJCW9mZnNldCA9IHN0YWNrLnBlZWsoKTsKCQkJCW91dHB1dFtqXVtpXSArPSBvZmZzZXQgLSBqIC0gMTsKCQkJCXN0YWNrLnB1c2goaik7CgkJCX0KCQl9CgoJCWZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspCgkJZm9yIChpbnQgaiA9IDA7IGogPCBhcnJheVswXS5sZW5ndGg7IGorKykKCQkJb3V0cHV0W2ldW2pdICs9IDE7CgoJCWZvciAoaW50W10gYTogb3V0cHV0KQoJCQlTeXN0ZW0ub3V0LnByaW50bG4oQXJyYXlzLnRvU3RyaW5nKGEpKTsKCX0KfQ==