#include #include using namespace std; #include #include template struct dualsegtree{ using F=function; const F lazycalcfn,updatefn; int n; T lazydefvalue; vectordat,lazy; vectorlazyflag; dualsegtree(int n_=0,T defvalue=0, const F lazycalcfn_=[](T a,T b){return a+b;}, const F updatefn_=[](T a,T b){return a+b;}, T lazydefvalue_=0 ):lazydefvalue(lazydefvalue_), lazycalcfn(lazycalcfn_),updatefn(updatefn_) { n=1; while(n&v) { for(int i=0;i0) { i=(i-1)/2; if(lazyflag[i])ret=updatefn(ret,lazy[i]); } return ret; } }; int N,Q; long A[2<<17]; long ans[2<<17]; main() { cin>>N>>Q; for(int i=0;i>A[i]; dualsegtreeP(N); vector > >Bu; for(int i=0;i>c>>x>>y; if(c=='B') { P.update(x-1,y,1); } else { Bu.push_back(make_pair(x-1,make_pair(y,-P.query(x-1)))); } } for(int i=0;i >p:Bu) { long y=p.second.first,cnt=p.second.second; cnt+=P.query(p.first); ans[p.first]+=cnt*y; } for(int i=0;i