This commit is contained in:
Zengtudor 2024-08-13 16:09:40 +08:00
parent 0464e800da
commit 4d1f526920
1 changed files with 38 additions and 95 deletions

View File

@ -1,112 +1,55 @@
/*
[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
*/
//暴力 80point 逆天了,样例太水了
#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();
const int MAX_N = 5e8+5;
int a[MAX_N];
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 readint();
int main(){
// auto a = new int[MAX_N];
const int n = readint();
for(int i=1;i<=n;i++){
const int m = readint();
if(m==1){
const int x=readint();
a[x]++;
}else if(m==2){
const int x=readint();
a[x]--;
}else if(m==3){
const int l=readint(),r=readint();
int ans=0;
for(auto i=sl;i!=sr;i++){
ans+=(*i)*v[(*i)];
}
if ((*sr)==r) {
ans+=(*sr)*v[(*sr)];
for(int j=l;j<=r;j++){
ans+=j*a[j];
}
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;
}else if(m==4){
const int x = readint();
for(int j=x;j>=0;j--){
if(a[j]){
cout<<j<<endl;
goto out1;
}
}
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<<-1<<endl;
out1:;
}else if(m==5){
const int x = readint();
for(int j=x;j<MAX_N;j++){
if(a[j]){
cout<<j<<endl;
goto out;
}
}
cout<<(*it)<<endl;
cout<<-1<<endl;
out:;
}
}
#ifdef OITEST
for(int i=1;i<=ans_num;i++){
int cans ,myans;
afile>>cans;
ss>>myans;
ASM(cans,myans)
}
#endif
}
int getint(){
int readint(){
int x=0,w=1;
char ch=0;
while(!isdigit(ch)){