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()