二叉堆板子,不知道哪里有问题
查看原帖
二叉堆板子,不知道哪里有问题
517637
瀛洲仙子楼主2024/8/24 12:31

rt,44分

#include<bits/stdc++.h>
using namespace std;
int heap[1000005],cnt;
int read()
{
	int x=0;char ch=' ';
	while(!isdigit(ch))
		ch=getchar();
	while(isdigit(ch))
		x=x*10+ch-48,
		ch=getchar();
	return x;
}
void write(int x)
{
	if(x>9)write(x/10);
	putchar(x%10+48);
}
void add(int x)
{
	heap[++cnt]=x;
	int ind=cnt;
	while(ind>1 and heap[ind]<heap[ind>>1])
		{swap(heap[ind],heap[ind>>1]);ind>>=1;} 
}
void mov()
{
	swap(heap[1],heap[cnt]);
	heap[cnt--]=0;int ind=1;
	while((ind<<1)<=cnt)
	{
		ind<<=1;
		if(ind&1<=cnt and heap[ind]>heap[ind&1])ind&=1;
		if(heap[ind]>heap[ind>>1])break;
		swap(heap[ind],heap[ind>>1]);
	}
}
int main()
{
	int n;cin>>n;while(n--)
	{
		int op=read();
		if(op==1)
		{int t=read();add(t);}
		else if(op==2)
		{write(heap[1]);putchar('\n');}
		else mov();
	}
	return 0;
}
2024/8/24 12:31
加载中...