cp-library

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub kobejean/cp-library

:warning: cp_library/alg/iter/arg/iargsort_fn.py

Depends on

Code

import cp_library.__header__
import cp_library.alg.__header__
import cp_library.alg.iter.__header__
import cp_library.alg.iter.arg.__header__

def iargsort(A: list[int], reverse=False):
    s, m = pack_sm(len(A))
    if reverse:
        for i,a in enumerate(A): A[i] = a<<s|i^m
        A.sort(reverse=True)
        for i,a in enumerate(A): A[i] = (a^m)&m
    else:
        for i,a in enumerate(A): A[i] = a<<s|i
        A.sort()
        for i,a in enumerate(A): A[i] = a&m
    return A
from cp_library.bit.pack.pack_sm_fn import pack_sm
'''
╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
             https://kobejean.github.io/cp-library               
'''




def iargsort(A: list[int], reverse=False):
    s, m = pack_sm(len(A))
    if reverse:
        for i,a in enumerate(A): A[i] = a<<s|i^m
        A.sort(reverse=True)
        for i,a in enumerate(A): A[i] = (a^m)&m
    else:
        for i,a in enumerate(A): A[i] = a<<s|i
        A.sort()
        for i,a in enumerate(A): A[i] = a&m
    return A


def pack_sm(N: int): s=N.bit_length(); return s,(1<<s)-1
Back to top page