Submission #1161504

#TimeUsernameProblemLanguageResultExecution timeMemory
11615046530089Swap Swap Sort (CCO21_day1problem1)Pypy 3
0 / 25
5096 ms200176 KiB
class FenwickTree:
    def __init__(self, size):
        self.size = size
        self.tree = [0] * (size + 1)

    def add(self, index, value):
        while index <= self.size:
            self.tree[index] += value
            index += index & -index

    def sum(self, index):
        total = 0
        while index > 0:
            total += self.tree[index]
            index -= index & -index
        return total

    def range_sum(self, left, right):
        return self.sum(right) - self.sum(left - 1)

def count_inversions(arr, K):
    # Map values to their positions in P
    ft = FenwickTree(K)
    inv_count = 0
    for i in range(len(arr)):
        inv_count += ft.range_sum(arr[i] + 1, K)
        ft.add(arr[i], 1)
    return inv_count

def swap_and_update(swaps, pos_map, A, K):
    inv_count = count_inversions([pos_map[x] for x in A], K)
    result = []
    
    for j in swaps:
        val1, val2 = pos_map[j], pos_map[j + 1]
        
        # Swap in position map
        pos_map[j], pos_map[j + 1] = val2, val1
        
        # Adjust inversion count
        affected_indices = [x for x in A if x in {j, j + 1}]
        new_inversions = count_inversions([pos_map[x] for x in affected_indices], K)
        inv_count = new_inversions  # Update with new inversions count
        
        result.append(inv_count)

    return result

# Reading input
import sys
input = sys.stdin.read
data = input().split()
idx = 0

# Read N, K, Q
N, K, Q = map(int, data[idx:idx+3])
idx += 3

# Read array A
A = list(map(int, data[idx:idx+N]))
idx += N

# Read swap queries
swaps = list(map(int, data[idx:idx+Q]))

# Initial target permutation
pos_map = {i: i - 1 for i in range(1, K + 1)}

# Process swaps and print results
results = swap_and_update(swaps, pos_map, A, K)
sys.stdout.write("\n".join(map(str, results)) + "\n")

Compilation message (stdout)

Compiling 'Main.py'...

=======
  adding: __main__.pyc (deflated 48%)

=======
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...