Вот псевдокод.
parTournMaxIndex(M, idx, n)
int incr;
Write -infinite (some very
small value) into M[n].
Write pid into idx[pid] and write n into idx[pid+n].
incr = 1;
int idx0, idx1, idxBig;
Key key0, key1;
while (incr < n)
Read idx[pid] into idx0 and read idx[pid+incr] into idx1.
Read M[idx0] into key0 and read M[idx1] into key1.
if (key1 > key0) idxBig = idx1;
else idxBig = idx0;
Write idxBig into idx[pid].
incr = 2 * incr;