import java.util.PriorityQueue;
import java.util.Scanner;
import java.util.TreeMap;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		PriorityQueue<Integer> queue1=new PriorityQueue<>();
		PriorityQueue<Integer> queue2=new PriorityQueue<>((s1,s2)->s2-s1);
		TreeMap<Integer, Integer> map=new TreeMap<>();
		Scanner scanner=new Scanner(System.in);
		int n=scanner.nextInt();
		for (int i = 0; i < n; i++) {
			int op=scanner.nextInt();
			if(op==1) {
				int x=scanner.nextInt();
				map.put(x, map.getOrDefault(x, 0)+1);
				
			}else if(op==2) {
				System.out.println(map.firstKey());
				
			}else if(op==3) {
				System.out.println(map.lastKey());
			}else if(op==4){
				int x=map.firstKey();
				if(map.get(x)>1) {
					map.put(x,map.get(x)-1) ;
				}else {
					map.remove(x);
				}
				
			}else if(op==5) {
				int x=map.lastKey();
				if(map.get(x)>1) {
					map.put(x,map.get(x)-1) ;
				}else {
					map.remove(x);
				}
			}
				
		}

	}

}

这道题我一开始想着用两个优先级相反的队列做,然后用一个数组来存每一个数的数量,结果发现只能过8个测试点,我也不知道问题出在哪,后面学题解的方法,用TreeMap来做,别说确实好用,firstKey可以得到最小键,lastKey可以得到最大键,移除键也可以通过put更新该键存在的数量,如果数量只有1,那么就直接remove