• + 0 comments
    class BTree:
        def __init__(self, n):
            self.n = n
            self.data = [0] * (n + 1)
    
        def query(self, i):
            res = 0
            while i > 0:
                res += self.data[i]
                i -= i & -i
            return res
    
        def update(self, i):
            while i <= self.n:
                self.data[i] += 1
                i += i & -i
    def larrysArray(A):
        n = len(A)
        tree = BTree(max(A))
        swaps = 0
        for i in range(n):
            # subtract the number of elements <= A[i]-1 from our position
            swaps += i-tree.query(A[i] - 1)
            tree.update(A[i])
        return "NO" if (swaps % 2) else "YES"