求助平衡树
  • 板块灌水区
  • 楼主PIKAQIUPIKA
  • 当前回复11
  • 已保存回复11
  • 发布时间2022/10/15 21:47
  • 上次更新2023/10/27 07:21:37
查看原帖
求助平衡树
708568
PIKAQIUPIKA楼主2022/10/15 21:47
#include<bits/stdc++.h>
using namespace std;
multiset<int>m;
int n,mm;
int main(){
	scanf("%d",&mm);
	for(int i=1;i<=mm;++i){
		int opt,x;
		scanf("%d%d",&opt,&x);
		if(opt==1)m.insert(x);
		if(opt==2)m.erase(m.find(x));
		if(opt==3){
			int ans=1;
			multiset<int>::iterator it=m.find(x);
			while(it!=m.begin()){
				it--;
				ans++;
			}
			printf("%d\n",ans);
		}
		if(opt==4){
			multiset<int>::iterator it=m.begin();
			for(int i=1;i<=x;++i)++it;
			it--;
			printf("%d\n",*it);
		}
		if(opt==5){
			multiset<int>::iterator it=m.lower_bound(x);
			it--;
			printf("%d\n",*it);
		}
		if(opt==6){
			multiset<int>::iterator it=m.upper_bound(x);
			printf("%d\n",*it);
		}
	}
	return 0;
}

如何吧for(int i=1;i<=x;++i)++it;优化成O(1),直接加会CE

2022/10/15 21:47
加载中...