查找排名,前驱,后继的multiset

#include
#define int long long
using namespace std;
typedef multiset::iterator sett;//重新定义一下迭代器
sett c,d;//定义两个迭代器 
signed main()
{
	int n,a,x;
	multiset s1;
	cin>>n;
	s1.insert(2147483647);
	//s1.insert(-2147483647);
	while(n--)
	{
		cin>>a>>x;
		switch(a){
			case 1:{//查询x的排名 
				c=s1.lower_bound(x);//二分查找x第一次出现的位置的迭代器
				int num=1;
				for(d=s1.begin();d!=c;d++)
				{
					num++;
				 } 
				 cout<

P5076 【深基16.例7】普通二叉树(简化版) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

multiset可以不去重,并且自动从小到大排序,insert输入,访问用迭代器

multiset::iterator迭代器

lower_bound找第一个大于等于x的数,便于找第一个x,往前一个就是前驱

upper_bound找第一个大于的数,就是后继

注意返回的都是迭代器,*d是迭代器所指的值

你可能感兴趣的:(c++,算法)