44分
查看原帖
44分
917683
rnf5114楼主2023/6/3 10:26
#include <iostream>
#include <cstring>
using namespace std;
int n,h[1000010];
int o,Len=0;
void down(int len){
    if(len*2+1<=Len&&h[len*2]!=0x7f&&h[len*2+1]!=0x7f&&h[len]>h[len*2]||h[len]>h[len*2+1]){
        if(h[len*2]>h[len*2+1]){
            swap(h[len],h[len*2+1]);
            down(len*2+1);
        }
        else{
            swap(h[len],h[len*2]);
            down(len*2);
        }
    }
}
void up(int len){
    while(len/2>0&&h[len/2]!=0x7f&&h[len]<h[len/2]){
        swap(h[len],h[len/2]);
        len/=2;
    }
}
void del(int len){
    swap(h[1],h[len]);
    Len--;
    down(1);
}
int main(){
    cin>>n;
    memset(h,0x7f,sizeof(h));
    for(int i=1;i<=n;i++){
        cin>>o;
        if(o==1){
            Len++;
            int x;
            cin>>x;
            h[Len]=x;
            up(Len);
        }
        else if(o==2){
            cout<<h[1]<<endl;
        }
        else{
            del(Len);
        }
    }
    return 0;
}
2023/6/3 10:26
加载中...