This documentation is automatically generated by online-judge-tools/verification-helper
import cp_library.alg.iter.__header__
from cp_library.alg.iter.argsort_fn import argsort
def sort_parallel_copies(*L: list, reverse=False):
N, K, order = len(L[0]), len(L), argsort(L[0], reverse)
R = tuple([0]*N for _ in range(K))
for k, Llst in enumerate(L):
Rlst = R[k]
for ri, li in enumerate(order):
Rlst[ri] = Llst[li]
return R
'''
╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
https://kobejean.github.io/cp-library
'''
def pack_sm(N: int):
s = N.bit_length()
return s, (1<<s)-1
def pack_enc(a: int, b: int, s: int):
return a << s | b
def pack_dec(ab: int, s: int, m: int):
return ab >> s, ab & m
def pack_indices(A, s):
return [a << s | i for i,a in enumerate(A)]
def argsort(A: list[int], reverse=False):
s, m = pack_sm(len(A))
if reverse:
I = [a<<s|i^m for i,a in enumerate(A)]
I.sort(reverse=True)
for i,ai in enumerate(I): I[i] = (ai^m)&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 sort_parallel_copies(*L: list, reverse=False):
N, K, order = len(L[0]), len(L), argsort(L[0], reverse)
R = tuple([0]*N for _ in range(K))
for k, Llst in enumerate(L):
Rlst = R[k]
for ri, li in enumerate(order):
Rlst[ri] = Llst[li]
return R