rt,WA了3-10点,玄关
#include <iostream>
using namespace std ;
int n , op ;
int d[1000100] ;
int tot = 0 ;
void repair ( int x ){
if ( x == 1 || d[x] >= d[x / 2] ) return ;
swap ( d[x] , d[x / 2] ) ;
repair ( x / 2 ) ;
return ;
}
void push ( int x ){
tot++ ;
d[tot] = x ;
repair(tot) ;
return ;
}
int top (){
return d[1] ;
}
void repair1 ( int x ){
if ( x >= tot ) return ;
if ( d[x] <= d[x * 2] && d[x] <= d[x * 2 + 1] ) return ;
if ( d[x] > d[x * 2] ){
swap ( d[x * 2] , d[x] ) ;
repair1 ( x * 2 ) ;
}else {
swap ( d[x * 2 + 1] , d[x] ) ;
repair1 ( x * 2 + 1 ) ;
}
return ;
}
void pop(){
swap ( d[tot] , d[1] ) ;
tot-- ;
repair1 ( 1 ) ;
return ;
}
int main (){
cin >> n ;
while ( n-- ){
cin >> op ;
if ( op == 1 ){
int temp ;
cin >> temp ;
push( temp ) ;
}
if ( op == 2 ){
cout << top() << '\n' ;
}
if ( op == 3 ){
pop() ;
}
}
return 0 ;
}