堆模板复习
作者:
goodboy_8
,
2024-05-25 14:59:34
,
所有人可见
,
阅读 13
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
const int N = 1e6;
int w[N],tot;
int top()
{
return w[1];
}
void modify(int x)
{
if(x==1||w[x]>w[x/2])
{
return;
}
swap(w[x],w[x/2]);
modify(x/2);
}
void push(int x)
{
w[++tot]=x;
modify(tot);
}
void repair(int x)
{
if(x*2>tot) return;
int tar=x*2;
if(x*2+1<=tot)
{
if(w[x*2+1]<w[x*2])
{
tar=x*2+1;
}
}
if(w[tar]<w[x])
{
swap(w[tar],w[x]);
repair(tar);
}
}
void pop()
{
swap(w[1],w[tot--]);
repair(1);
}
int main()
{
int n,op;
cin>>n;
while(n--)
{
cin>>op;
if(op==1)
{
int x;
cin>>x;
push(x);
}
else if(op==2)
{
cout<<w[1]<<endl;
}
else if(op==3)
{
pop();
}
}
return 0;
}