class BIT_dinamic: #0-indexed def __init__(self, n): self.tree = {} self.MAX = 1<<(n+1).bit_length() def get_sum(self, i): #a_0 + ... + a_{i} #閉区間 s = 0; i += 1 while i > 0: if i in self.tree: s += self.tree[i] i -= i & -i return s def query(self,l,r): #a_l + ... + a_r 閉区間 return self.get_sum(r) - self.get_sum(l-1) def add(self, i, x): i += 1 while i <= self.MAX: if i in self.tree: self.tree[i] += x else: self.tree[i] = x i += i & -i def bisect_left(self,w): #和が w 以上になる最小の index #w が存在しない場合 -1 を返す if w <= 0: return 0 x,k = 0,self.MAX while k: k >>= 1 if x+k not in self.tree: x += k elif self.tree[x+k] < w: w -= self.tree[x+k] x += k return x if x!=self.MAX-1 else -1 def f(n,k): return 50*n+500*n//(8+2*k) n = int(input()) *a, = map(int,input().split()) T = int(input()) from collections import defaultdict num = [0]*n points = defaultdict(int) last = defaultdict(int) bit = BIT_dinamic(15601*100000) for t in range(T): s,p = input().split() val = points[s]*100000 + (T-1-last[s]) if p == "?": x = bit.get_sum(val) print(len(last)-x+1) else: if points[s]: bit.add(val,-1) p = ord(p)-65 num[p] += 1 points[s] += f(a[p],num[p]) last[s] = t bit.add(points[s]*100000+(T-1-last[s]),1)