#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define popcount __builtin_popcount using namespace std; typedef long long int ll; typedef pair P; template struct BIT{ //1-indexed vector bit; int size; BIT(int n):size(n), bit(n+1, 0){} T sum(int i){ T s=0; while(i>0){ s+=bit[i]; i-=(i&(-i)); } return s; } void add(int i, T x){ while(i<=size){ bit[i]+=x; i+=(i&(-i)); } } }; int main() { int n; cin>>n; int l[30]; for(int i=0; i>l[i]; int T; cin>>T; string name[100010]; char p[100010]; int cnt[30]={}; map mp; map s, t; mp[{0, 0}]=0; int v[100010]; for(int i=1; i<=T; i++){ cin>>name[i]>>p[i]; if(p[i]!='?'){ cnt[p[i]-'A']++; v[i]=(int)(50*l[p[i]-'A']+50*l[p[i]-'A']/(0.8+0.2*cnt[p[i]-'A'])); s[name[i]]+=v[i]; mp[{-s[name[i]], i}]=0; } } int m=0; for(auto &p:mp){ m++; p.second=m; } BIT bit(m); bit.add(m, (int)s.size()); s.clear(); fill(cnt, cnt+n, 0); for(int i=1; i<=T; i++){ if(p[i]!='?'){ cnt[p[i]-'A']++; int x=mp[{-s[name[i]], t[name[i]]}]; bit.add(x, -1); s[name[i]]+=v[i]; int y=mp[{-s[name[i]], i}]; bit.add(y, 1); t[name[i]]=i; }else{ int x=mp[{-s[name[i]], t[name[i]]}]; printf("%d\n", bit.sum(x)); } } return 0; }