set 如何不TLE
查看原帖
set 如何不TLE
367521
roger_yrj楼主2023/5/1 13:19
#include<bits/stdc++.h>
using namespace std;
//--------------set--------------
const int N=2e7+10,p=1e7;
int n,cnt[N];
set<int>s;
inline int read(){
	int x=0,f=1;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
	while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
	return x*f;
}
int main(){
	cin>>n;
	while(n--){
		int op=read(),x=read();
		if(op==1){
			if(!cnt[x+p])s.insert(x);
			cnt[x+p]++;
		}else if(op==2){
			cnt[x+p]--;
			if(!cnt[x+p])s.erase(x);
		}else if(op==3){
			int ans=1;
			auto it=s.begin();
			while(*it!=x)ans+=cnt[(*it)+p],it++;
			printf("%d\n",ans);
		}else if(op==4){	
			auto it=s.begin();
			for(int i=1;i<=x;it++)i+=cnt[(*it)+p];
			it--;
			printf("%d\n",*it);
		}else if(op==5){
			auto it=s.lower_bound(x);
			--it;
			printf("%d\n",*it);
		}else{
			auto it=s.upper_bound(x);
			printf("%d\n",*it);
		}
	}
}

感觉3和4可以优化,但想不到怎么优化

2023/5/1 13:19
加载中...