import java.util.*;
import java.util.concurrent.*;
import java.util.concurrent.atomic.*;
class Main {
public static void main
(String[] args
) throws ExecutionException
{
4, 27, 0, 0, 25, 29, 9, 27, 1, 29, 12, 2, 23, 22, 0,
19, 17, 2, 22, 24, 21, 27, 6, 6, 7, 4, 20, 7, 26, 10
};
ForkJoinPool pool = new ForkJoinPool(2); // ideone doesn't allow much
pool.invoke(new QuickSortWithThreads(array, 0, array.size() - 1));
for(int i=0; i<array.size();i++)
System.
out.
println(array.
get(i
)); }
}
class QuickSortWithThreads extends RecursiveAction {
private final List<Integer> arr;
private final int left;
private final int right;
public QuickSortWithThreads(List<Integer> arr, int left, int right) {
this.arr = arr;
this.left = left;
this.right = right;
}
protected void compute() {
if (left >= right) return;
int pivot = partition();
invokeAll(new QuickSortWithThreads(arr, left, pivot - 1),
new QuickSortWithThreads(arr, pivot + 1, right));
}
int partition() {
int pivot = arr.get(right);
int i = left-1;
for( int j = left; j <= right-1; j++){
if (arr.get(j) <= pivot){
i = i+1;
exchange(i, j);
}
}
exchange(i+1, right);
return i+1;
}
void exchange(int i, int j){
int swap = arr.get(i);
arr.set(i, arr.get(j));
arr.set(j, swap);
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuKjsKaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy4qOwoKY2xhc3MgTWFpbiB7CgogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgCiAgICAgICAgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbgogICAgewogICAgICAgIEludGVnZXJbXSB2YWx1ZXMgPSB7CiAgICAgICAgICAgIDQsIDI3LCAwLCAwLCAyNSwgMjksIDksIDI3LCAxLCAyOSwgMTIsIDIsIDIzLCAyMiwgMCwKICAgICAgICAgICAgMTksIDE3LCAyLCAyMiwgMjQsIDIxLCAyNywgNiwgNiwgNywgNCwgMjAsIDcsIDI2LCAxMAogICAgICAgIH07CiAgICAgICAgTGlzdCA8SW50ZWdlcj4gYXJyYXkgPSBBcnJheXMuYXNMaXN0KHZhbHVlcyk7CiAgICAgICAgRm9ya0pvaW5Qb29sIHBvb2wgPSBuZXcgRm9ya0pvaW5Qb29sKDIpOyAvLyBpZGVvbmUgZG9lc24ndCBhbGxvdyBtdWNoCiAgICAgICAgcG9vbC5pbnZva2UobmV3IFF1aWNrU29ydFdpdGhUaHJlYWRzKGFycmF5LCAwLCBhcnJheS5zaXplKCkgLSAxKSk7CiAgICAgICAgZm9yKGludCBpPTA7IGk8YXJyYXkuc2l6ZSgpO2krKykKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGFycmF5LmdldChpKSk7CiAgICB9Cn0KCgpjbGFzcyBRdWlja1NvcnRXaXRoVGhyZWFkcyBleHRlbmRzIFJlY3Vyc2l2ZUFjdGlvbiB7CgogICAgcHJpdmF0ZSBmaW5hbCBMaXN0PEludGVnZXI+IGFycjsKICAgIHByaXZhdGUgZmluYWwgaW50IGxlZnQ7CiAgICBwcml2YXRlIGZpbmFsIGludCByaWdodDsKICAgIAogICAgcHVibGljIFF1aWNrU29ydFdpdGhUaHJlYWRzKExpc3Q8SW50ZWdlcj4gYXJyLCBpbnQgbGVmdCwgaW50IHJpZ2h0KSB7CiAgICAgICAgdGhpcy5hcnIgPSBhcnI7CiAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDsKICAgICAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7CiAgICB9CgogICAgcHJvdGVjdGVkIHZvaWQgY29tcHV0ZSgpIHsKICAgICAgICBpZiAobGVmdCA+PSByaWdodCkgcmV0dXJuOwogICAgICAgIGludCBwaXZvdCA9IHBhcnRpdGlvbigpOwogICAgICAgIGludm9rZUFsbChuZXcgUXVpY2tTb3J0V2l0aFRocmVhZHMoYXJyLCBsZWZ0LCBwaXZvdCAtIDEpLAogICAgICAgICAgICAgICAgICBuZXcgUXVpY2tTb3J0V2l0aFRocmVhZHMoYXJyLCBwaXZvdCArIDEsIHJpZ2h0KSk7CiAgICB9CgogICAgaW50IHBhcnRpdGlvbigpIHsKICAgICAgICBpbnQgcGl2b3QgPSBhcnIuZ2V0KHJpZ2h0KTsKICAgICAgICBpbnQgaSA9IGxlZnQtMTsKICAgICAgICBmb3IoIGludCBqID0gbGVmdDsgaiA8PSByaWdodC0xOyBqKyspewogICAgICAgICAgICBpZiAoYXJyLmdldChqKSA8PSBwaXZvdCl7CiAgICAgICAgICAgICAgICBpID0gaSsxOwogICAgICAgICAgICAgICAgZXhjaGFuZ2UoaSwgaik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZXhjaGFuZ2UoaSsxLCByaWdodCk7CiAgICAgICAgcmV0dXJuIGkrMTsKICAgIH0KCiAgICB2b2lkIGV4Y2hhbmdlKGludCBpLCBpbnQgail7CiAgICAgICAgaW50IHN3YXAgPSBhcnIuZ2V0KGkpOwogICAgICAgIGFyci5zZXQoaSwgYXJyLmdldChqKSk7IAogICAgICAgIGFyci5zZXQoaiwgc3dhcCk7CiAgICB9Cgp9Cg==