bdfz_2024_summer/day10/U88589/U88589.cpp

121 lines
2.9 KiB
C++
Raw Normal View History

2024-08-12 02:07:56 +00:00
/*
[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<bits/stdc++.h>
using namespace std;
#define int long long
const int MAX_X=1e5+5;
int q;
vector<int>v(MAX_X);
set<int> s;
int getint();
signed main(signed argc,char *argv[]){
#ifdef OITEST
cout<<"TESTING"<<endl;
#define AS(c){if(!(c)){cerr<<"assert failed:"<<#c<<endl;return -1;}}
#define ASM(a,b){if((a)!=(b)){cerr<<"assert failed: "<<a<<endl<<b<<endl;return 1;}}
AS(argc==3)
auto fin = freopen(argv[1],"r",stdin);
AS(fin!=NULL)
ifstream afile(argv[2]);
stringstream ss;
#define cout ss
int ans_num = 0;
#endif
q=getint();
for(int i=1;i<=q;i++){
const int n=getint();
#ifdef OITEST
if(n>=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<<ans<<endl;
}else if(n==4){
const int x=getint();
// if(x==99){
// cerr<<"debugging"<<endl;
// }
auto it=s.lower_bound(x);
if((*it)==x){
cout<<x<<endl;
continue;
}else{
it--;
if((*it)<x){
cout<<(*it)<<endl;
continue;
}else{
cout<<-1<<endl;
continue;
}
}
cout<<(*it)<<endl;
}else if(n==5){
const int x=getint();
auto it=s.lower_bound(x);
if(it==s.end()){
cout<<-1<<endl;
continue;
}
cout<<(*it)<<endl;
}
}
#ifdef OITEST
for(int i=1;i<=ans_num;i++){
int cans ,myans;
afile>>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;
}