36分玄关
查看原帖
36分玄关
1265349
HsNu1ly7_楼主2024/5/24 18:41

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 ; 
}
2024/5/24 18:41
加载中...