This documentation is automatically generated by online-judge-tools/verification-helper
import cp_library.__header__
import cp_library.alg.__header__
import cp_library.alg.iter.__header__
from cp_library.alg.iter.arg.argsort_fn import argsort
import cp_library.alg.iter.sort.__header__
def isort_parallel(*L: list, reverse=False):
inv, order = [0]*len(L[0]), argsort(L[0], reverse=reverse)
for i, j in enumerate(order): inv[j] = i
for i, j in enumerate(order):
for A in L: A[i], A[j] = A[j], A[i]
order[inv[i]], inv[j] = j, inv[i]
return L
'''
╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
https://kobejean.github.io/cp-library
'''
def argsort(A: list[int], reverse=False):
s, m = pack_sm(len(A))
if reverse:
I = [a<<s|m^i for i,a in enumerate(A)]
I.sort(reverse=True)
for i,ai in enumerate(I): I[i] = m^ai&m
else:
I = [a<<s|i for i,a in enumerate(A)]
I.sort()
for i,ai in enumerate(I): I[i] = ai&m
return I
def pack_sm(N: int): s=N.bit_length(); return s,(1<<s)-1
def isort_parallel(*L: list, reverse=False):
inv, order = [0]*len(L[0]), argsort(L[0], reverse=reverse)
for i, j in enumerate(order): inv[j] = i
for i, j in enumerate(order):
for A in L: A[i], A[j] = A[j], A[i]
order[inv[i]], inv[j] = j, inv[i]
return L