update
This commit is contained in:
parent
0464e800da
commit
4d1f526920
@ -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{
|
||||
}else if(m==4){
|
||||
const int x = readint();
|
||||
for(int j=x;j>=0;j--){
|
||||
if(a[j]){
|
||||
cout<<j<<endl;
|
||||
goto out1;
|
||||
}
|
||||
}
|
||||
cout<<-1<<endl;
|
||||
continue;
|
||||
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;
|
||||
}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;
|
||||
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)){
|
||||
|
Loading…
Reference in New Issue
Block a user