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
{
{
// Main array to be accessed from innermost to outermost element
int[] arr = new int[]{1,2,3,4,5};
int[] map = creatIndexMap(arr.length);
printOut(arr, map);
int[] arr2 = new int[]{1,2,3,4,5,6};
int[] map2 = creatIndexMap(arr2.length);
printOut(arr2, map2);
}
public static int[] creatIndexMap(int length) {
// Create a deque so elements can be removed from both ends
Deque<Integer> tmp = new LinkedList<Integer>();
for(int i = 0; i < length; i++) {
tmp.add(i);
}
// In alternation remove the last and first entries of tmp
// and add them in reverse order to map array
int[] map = new int[length];
int index = length-1;
while (!tmp.isEmpty()) {
// Remove last element
map[index--] = (int) tmp.removeLast();
// Remove first element
if(!tmp.isEmpty()) {
map[index--] = (int) tmp.removeFirst();
}
}
return map;
}
// Dispay results
public static void printOut(int[] arr, int[] map) {
System.
out.
println("Original array:"); for(int i = 0; i < arr.length; i++) {
System.
out.
print( arr
[i
] + " "); }
System.
out.
println("Index-mapped array:"); for(int i = 0; i < arr.length; i++) {
System.
out.
print( arr
[map
[i
]] + " "); }
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoKCQkvLyBNYWluIGFycmF5IHRvIGJlIGFjY2Vzc2VkIGZyb20gaW5uZXJtb3N0IHRvIG91dGVybW9zdCBlbGVtZW50CgkJaW50W10gYXJyID0gbmV3IGludFtdezEsMiwzLDQsNX07CgkJaW50W10gbWFwID0gY3JlYXRJbmRleE1hcChhcnIubGVuZ3RoKTsKICAgICAgICBwcmludE91dChhcnIsIG1hcCk7CiAgICAgICAgCiAgICAgICAgaW50W10gYXJyMiA9IG5ldyBpbnRbXXsxLDIsMyw0LDUsNn07CgkJaW50W10gbWFwMiA9IGNyZWF0SW5kZXhNYXAoYXJyMi5sZW5ndGgpOwogICAgICAgIHByaW50T3V0KGFycjIsIG1hcDIpOwoJfQoJCglwdWJsaWMgc3RhdGljIGludFtdIGNyZWF0SW5kZXhNYXAoaW50IGxlbmd0aCkgewoJCQoJCS8vIENyZWF0ZSBhIGRlcXVlIHNvIGVsZW1lbnRzIGNhbiBiZSByZW1vdmVkIGZyb20gYm90aCBlbmRzCgkJRGVxdWU8SW50ZWdlcj4gdG1wID0gbmV3IExpbmtlZExpc3Q8SW50ZWdlcj4oKTsKCQlmb3IoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKCQkJdG1wLmFkZChpKTsKCQl9CgkJCgkJLy8gSW4gYWx0ZXJuYXRpb24gcmVtb3ZlIHRoZSBsYXN0IGFuZCBmaXJzdCBlbnRyaWVzIG9mIHRtcAoJCS8vIGFuZCBhZGQgdGhlbSBpbiByZXZlcnNlIG9yZGVyIHRvIG1hcCBhcnJheQoJCWludFtdIG1hcCA9IG5ldyBpbnRbbGVuZ3RoXTsKCQlpbnQgaW5kZXggPSBsZW5ndGgtMTsKCQl3aGlsZSAoIXRtcC5pc0VtcHR5KCkpIHsKCQkJLy8gUmVtb3ZlIGxhc3QgZWxlbWVudAoJCQltYXBbaW5kZXgtLV0gPSAoaW50KSB0bXAucmVtb3ZlTGFzdCgpOwoJCQkKCQkJLy8gUmVtb3ZlIGZpcnN0IGVsZW1lbnQKCQkJaWYoIXRtcC5pc0VtcHR5KCkpIHsKCQkJCW1hcFtpbmRleC0tXSA9IChpbnQpIHRtcC5yZW1vdmVGaXJzdCgpOwoJCQl9CgkJfQoJCXJldHVybiBtYXA7Cgl9CgkKCS8vIERpc3BheSByZXN1bHRzCglwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRPdXQoaW50W10gYXJyLCBpbnRbXSBtYXApIHsKCQlTeXN0ZW0ub3V0LnByaW50bG4oIk9yaWdpbmFsIGFycmF5OiIpOwoJCWZvcihpbnQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsKCQkJU3lzdGVtLm91dC5wcmludCggYXJyW2ldICsgIiAiKTsKCQl9CgkJCgkJU3lzdGVtLm91dC5wcmludGxuKCk7CgkJU3lzdGVtLm91dC5wcmludGxuKCJJbmRleC1tYXBwZWQgYXJyYXk6Iik7CgkJZm9yKGludCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgewoJCQlTeXN0ZW0ub3V0LnByaW50KCBhcnJbbWFwW2ldXSArICIgIik7CgkJfQoJCVN5c3RlbS5vdXQucHJpbnRsbigpOwoJfQp9