3378
  • 板块学术版
  • 楼主zhang_boring
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/8/7 14:26
  • 上次更新2024/8/7 15:15:34
查看原帖
3378
764047
zhang_boring楼主2024/8/7 14:26
#include<bits/stdc++.h>
using namespace std;
long long a[1000005],n,tt;
void max_heapify(long long a[], long long i, long long n){
	long long l = i * 2;
	long long r = i * 2 + 1;
	long long largest = i;
	if(l <= n && a[l] > a[i]) largest = l;
	if(r <= n && a[r] > a[largest]) largest = r;
	if(largest != i){
		swap(a[i], a[largest]);
		max_heapify(a, largest, n);
	}
}
void build_heap(long long a[], long long n){
	for(long long i = n / 2; i >= 1; i--) max_heapify(a,i,n);
}
void heapSort(long long a[], long long n){
	build_heap(a,n);
	for(long long i = n; i >= 2; i--){
		swap(a[1],a[i]);
		max_heapify(a,1,i - 1);
	} 
}
int main(){
	scanf("%lld",&n);
	for(long long i = 1; i <= n; i++){
		long long t,t1;
		scanf("%lld",&t);
		if(t == 1){
			tt++;
			scanf("%lld",&a[tt]);
			heapSort(a,tt);
		} else if(t == 2){
			printf("%lld\n",a[1]);
		} else{
			swap(a[1],a[tt]);
			tt--;
			heapSort(a,tt);
		}
	}
	return 0;
}
2024/8/7 14:26
加载中...