玄关(92分手写堆求条)
查看原帖
玄关(92分手写堆求条)
1127117
xuehanlin楼主2025/1/22 19:39

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;
}

2025/1/22 19:39
加载中...