#include #define FOR(i,a,b) for (int i=(a);i<(b);i++) #define FORR(i,a,b) for (int i=(a);i>=(b);i--) #define pb push_back #define pcnt __builtin_popcount #define show(x) cout<<#x<<" = "< pii; typedef vector vi; typedef vector vvi; typedef vector vpii; typedef set si; typedef pair pll; typedef vector vl; typedef vector vvl; typedef vector vpll; typedef set sl; templatestring join(vector&v) {stringstream s;FOR(i,0,sz(v))s<<' '<b)swap(a,b);for(;a>0;b%=a,swap(a,b));return b;} int modpow(ll a,ll n,int m){if(a==0)return a;ll p=1;for(;n>0;n/=2,a=a*a%m)if(n&1)p=p*a%m;return(int)p;} void dout(double d){printf("%.12f\n",d);} const int iinf = 1e9; const ll linf = 1e18; const int mod = 1e9+7; int n, t, ac[26], l[26]; map m; string s; char p; pair Q[100000]; vpii ra; map rah; struct SegTree{ typedef int T; T e = 0; T m(const T&a, const T&b){return a + b;} //################################################### typedef int i;i n;vector d; void init(i m){n=1<<(32-__builtin_clz(m-1));d.resize(2*n-1);FOR(j,0,2*n-1)d[j]=e;} void init(vector&v){n=1<<(32-__builtin_clz(sz(v)-1));d.resize(2*n-1);FOR(j,0,sz(v))d[j+n-1]=v[j];FORR(k, n-2, 0)d[k]=m(d[k*2+1],d[k*2+2]);} void update(i k,T a){k+=n-1;d[k]=a;while(k>0){k=(k-1)/2;d[k]=m(d[k*2+1],d[k*2+2]);}} T q(i a,i b,i k,i l,i r){return (r<=a||b<=l)?e:(a<=l&&r<=b)?d[k]:m(q(a,b,k*2+1,l,(l+r)/2),q(a,b,k*2+2,(l+r)/2,r));} T query(i a,i b){return q(a,b,0,0,n);} }; SegTree seg; main(){ cin.tie(0); ios::sync_with_stdio(false); seg.init(15601); cin >> n; FOR(i, 0, n){ cin >> l[i]; l[i] *= 50; } cin >> t; FOR(i, 0, t){ cin >> s >> p; int ip = p - 'A', ms; Q[i] = mp(s, ip); if(ip < 0)continue; m[s].fi += l[ip] * (10 + ac[ip]) / (5 + ac[ip]); m[s].se = -i; ra.pb(m[s]); ac[ip]++; } sort(rng(ra)); int co = 0; each(itr, ra){ rah[*itr] = co; co++; } m.clear(); FOR(i, 0, 26)ac[i] = 0; seg.init(co); FOR(i, 0, t){ s = Q[i].fi; int ip = Q[i].se; if(ip < 0){ cout << seg.query(rah[m[s]], co) << "\n"; continue; } int ms; if(m.find(s) != m.end()){ ms = rah[m[s]]; seg.update(ms, seg.query(ms, ms+1)-1); } m[s].fi += l[ip] * (10 + ac[ip]) / (5 + ac[ip]); m[s].se = -i; ms = rah[m[s]]; seg.update(ms, seg.query(ms, ms+1)+1); ac[ip]++; } return 0; }