Wa了一个点...QwQ
#include<iostream>
using namespace std;
typedef long long ll;
int n,a[100010],top;
void build_up(int i) {
if(a[i/2]>a[i]&&i/2!=0) {
swap(a[i/2],a[i]);
build_up(i/2);
}
}
void build_down(int i) {
if(i*2>top) return;
if(a[i*2]<a[i*2+1]||i*+1>top) {
if(i*2<=n&&a[i*2]<a[i]) {
swap(a[i*2],a[i]);
build_down(i*2);
}
}
else if(i*2+1<=top&&a[i*2+1]<a[i]) {
swap(a[i*2+1],a[i]);
build_down(i*2+1);
}
}
void push(int x) {
a[++top]=x;
build_up(top);
}
void pop() {
swap(a[1],a[top--]);
build_down(1);
}
int front() {
return a[1];
}
int main() {
cin>>n;
for(int i=1;i<=n;i++) {
int op,x;
cin>>op;
if(op==1) {
cin>>x;
push(x);
}
else if(op==2) {
cout<<front()<<endl;
}
else pop();
}
return 0;
}