import bisect def main(): import sys input = sys.stdin.read data = input().split() idx = 0 n = int(data[idx]) idx += 1 L = list(map(int, data[idx:idx+n])) idx += n problem_level = {} for i in range(n): problem = chr(ord('A') + i) problem_level[problem] = L[i] T = int(data[idx]) idx += 1 users = {} # Maps username to (sum_L, k, current_key) sorted_keys = [] output = [] for _ in range(T): name = data[idx] p = data[idx+1] idx += 2 if p != '?': # Handle solve submission level = problem_level[p] if name not in users: sum_L = level k = 1 sp = k * (k + 1) // 2 score = sum_L * 100 - sp key = (-score, sp, name) bisect.insort(sorted_keys, key) users[name] = (sum_L, k, key) else: old_sum_L, old_k, old_key = users[name] # Remove old key pos = bisect.bisect_left(sorted_keys, old_key) if pos < len(sorted_keys) and sorted_keys[pos] == old_key: sorted_keys.pop(pos) # Update user sum_L = old_sum_L + level k = old_k + 1 sp = k * (k + 1) // 2 score = sum_L * 100 - sp new_key = (-score, sp, name) bisect.insort(sorted_keys, new_key) users[name] = (sum_L, k, new_key) else: # Handle query sum_L, k, current_key = users[name] # Find the rank rank = bisect.bisect_left(sorted_keys, current_key) + 1 output.append(str(rank)) print('\n'.join(output)) if __name__ == "__main__": main()