help
查看原帖
help
1210321
zhangzhixu000001楼主2024/5/4 17:14
#include <bits/stdc++.h>
using namespace std;
#define ls(n) n<<1
#define rs(n) n<<1|1
#define fa(n) n>>1
const int maxn=1e6+5;
int heap[maxn],top;
void swap(int &a,int &b)
{
	int c=a;a=b;b=c;
}
void up(int i)
{
	if (heap[i]<heap[fa(i)]&&i!=1)
	{
		swap(heap[i],heap[fa(i)]);
		up(fa(i));
	}
}
void down(int i)
{
	int lson=heap[ls(i)],rson=heap[rs(i)];
	if (lson!=0||rson!=0&&heap[i]>min(lson,rson))
	{
		if(lson!=0&&rson==0)
		{
			swap(heap[i],heap[ls(i)]);
			down(ls(i));
		}
		else if(rson!=0&&lson==0)
		{
			swap(heap[i],heap[rs(i)]);
			down(rs(i));
		}
		else
		{
			int minnum=lson<=rson?ls(i):rs(i);
			swap(heap[i],heap[minnum]);
			down(minnum);
		}
	}
	return;
}
void heapinsert(int x)
{
	heap[top+1]=x;top++;
	up(top);
}
int heapmin(){return heap[1];}
void deletemin()
{
	swap(heap[1],heap[top]);
	heap[top--]=0;
	down(1);
}
int main()
{
	ios::sync_with_stdio(0);
	int n,op,num;cin>>n;
	for (int i=1;i<=n;i++)
	{
		cin>>op;
		if (op==1) cin>>num;
		switch(op)
		{
			case 1:heapinsert(num);break;
			case 2:cout<<heapmin()<<endl;break;
			case 3:deletemin();break;
			default:break;
		}
	}
	return 0;
}
2024/5/4 17:14
加载中...