/* [set容器] - `1 x`: 插入一个值为 $x$ 的数; - `2 x`: 删除一个值为 $x$ 的数,保证存在,若有多个只删除 $1$ 个; - `3 l r`: 询问所有满足 $l\le x\le r$ 的 $x$ 的和;[排序] - `4 x`: 询问集合中 <= x 的最大数,若没有输出 `-1`; - `5 x`: 询问集合中 >= x 的最小数,若没有输出 `-1`; 1 2 */ #include using namespace std; #define int long long const int MAX_X=1e5+5; int q; vectorv(MAX_X); set s; int getint(); signed main(signed argc,char *argv[]){ #ifdef OITEST cout<<"TESTING"<=3){ ans_num++; } #endif if(n==1){ const int x=getint(); /*auto state = */s.insert(x); if(x>=v.size())v.resize(x+1); v[x]++; }else if (n==2) { const int x=getint(); v[x]--; if(v[x]==0){s.erase(x);} }else if(n==3){ const int l=getint(),r=getint(); const auto sl=s.lower_bound(l) ,sr=s.lower_bound(r); int ans=0; for(auto i=sl;i!=sr;i++){ ans+=(*i)*v[(*i)]; } if ((*sr)==r) { ans+=(*sr)*v[(*sr)]; } cout<>cans; ss>>myans; ASM(cans,myans) } #endif } int getint(){ int x=0,w=1; char ch=0; while(!isdigit(ch)){ if(ch=='-')w=-1; ch=getchar(); } while(isdigit(ch)){ x=x*10+(ch-'0'); ch=getchar(); } return x*w; }