萌新第一天学c艹36分求助
查看原帖
萌新第一天学c艹36分求助
825829
F__K_z楼主2023/12/5 18:29
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 7;
int n, a[N], t;
void Up(int p) {
	while (p > 1 && a[p] < a[p / 2])
		swap(a[p], a[p / 2]	), p /= 2;
}
void Down(int p) {
	while (p >= t) {
		if (p * 2 > t) break;
		if (p * 2 == t) {
			if (a[p] > a[p * 2]) swap(a[p], a[p * 2]);
			break;
		} 
		int s = p * 2 + (a[p * 2] < a[p * 2 + 1]);
		if (a[p] > a[s]) swap(a[p], a[s]), p = s;
		else break;
	}
}
void Push(int x) {
	a[++t] = x, Up(t);
}
int Top() {
	return a[1];
}
void Pop() {
	a[1] = a[t--], Down(1);
}
int main() {
	cin >> n;
	while (n--) {
		int o, x;
		cin >> o;
		if (o == 1) cin >> x, Push(x);
		if (o == 2) cout << Top() << endl;
		if (o == 3) Pop();
	}
	return 0;
}
2023/12/5 18:29
加载中...