栈插入与删除的同时可以随时求中位数法——使用multiset平衡二叉树对顶堆实现

本题multiset需要掌握的点:
	multiset内部实现时平衡二叉树;
	multiset允许存储重复的元素;
	multiset删除元素k的方法有两种:
		比如multiset s;
		①s.erase(k);删除所有的k
		②s.erase(s.find(k));删除一个k
	multiset是排好序的,从小到大排序
	multiset删除最后一个元素:
		auto t = s.end();t--;
对顶堆实现我们需要构造两个multiset<int> up,down;其中up存储的是比较大的那一半,
而down存储的是较小的那一半,且up的大小与down大小相比,要么就是up比down小1,要么就是相等
插入的时候,需要记住up存放较大的那一部分,down存储较小的那一部分,因此在插
入的需要判断应该插入到哪一个multiset来保证它的这一特性
删除的时候,比较简单了,查看k在哪一个里面,然后删除,删除方式参考前面指出的
multiset删除方法
上述插入与删除操作之后都会遇到一个问题,就是可能破坏up与down的大小的约束
条件,因此需要调用change去调整.

猜你喜欢

转载自blog.csdn.net/qq_44932835/article/details/119960216