44pts求助
查看原帖
44pts求助
973480
封禁用户楼主2024/9/22 14:23
#include<bits/stdc++.h>
using namespace std;
struct tree{
	int p=0,lchild=0,rchild=0;
}heap[1000005];
int len=0;
bool check(int x){
	if(x%2==0) return heap[x/2].p<heap[x].p;
	else return heap[(x-1)/2].p<heap[x].p;
}
void insert(int x){
	len++;
	heap[len].p=x;
	if(len!=1){
		if(len%2==0) heap[len/2].lchild=len;
		else heap[(len-1)/2].rchild=len;
		int q=len;
		while(1){
			if(check(q)) break;
			if(q%2==0) swap(heap[q].p,heap[q/2].p),q=q/2;
			else swap(heap[q].p,heap[(q-1)/2].p),q=(q-1)/2;
		}
	}
	return;
}
void detele(){
	int q=1;
	while(heap[q].lchild||heap[q].rchild){
		if(heap[q].lchild&&heap[q].rchild){
			if(heap[heap[q].lchild].p>=heap[heap[q].rchild].p){
				swap(heap[q].p,heap[heap[q].rchild].p);
				q=heap[q].rchild;
			}
			else{
				swap(heap[q].p,heap[heap[q].lchild].p);
				q=heap[q].lchild;
			}
		}else if(heap[q].lchild){
			swap(heap[q].p,heap[heap[q].lchild].p);
			q=heap[q].lchild;
		}else{
			swap(heap[q].p,heap[heap[q].rchild].p);
			q=heap[q].rchild;
		}
	}
	heap[len].p=0;
	if(len%2==0) heap[len/2].lchild=0;
	else heap[(len-1)/2].rchild=0;
	len--;
	return;
}
int main(){
	int n;
	cin >> n;
	for(int i=1;i<=n;i++){
		int opt;
		cin >> opt;
		if(opt==1){
			int x;
			cin >> x;
			insert(x);
		}else if(opt==2){
			cout << heap[1].p << endl;
		}else{
			detele();
		}
	}
    return 0;
}
2024/9/22 14:23
加载中...