手写堆8pts求助
查看原帖
手写堆8pts求助
632409
Dream_not_found楼主2023/1/2 21:10
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<iomanip>
#include<algorithm>
#include<vector>
#include<queue>
#include<stack>
#include<deque>
#include<map>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N = 1e6 + 10, M = 1e5 + 10;
const double PI = acos(-1.0);
const double eps = 1e-6;
const ll mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;

ll heap[N], len = 0;
int n;
  
void push(ll x) {
	heap[++len] = x;
	ll i = len;
	while (i > 1 && heap[i] < heap[i / 2]) {
		swap(heap[i], heap[i / 2]);
		i = i / 2;
	}
}
void pop() {
	heap[1] = heap[len--];
	ll i = 1;
	while (2 * i <= len) {
		int son = 2 * i;
		if (son + 1 <= len && heap[son + 1] < heap[son])son++;
		if (heap[son] < heap[i]) {
			swap(heap[son], heap[i]);
			i = son;
		} else break;
	}
}
int main() {
//	freopen("xxx.in","r",stdin);
//  freopen("xxx.out","w",stdout);
	scanf("%d", &n);
//	printf("%d\n",n);
	while (n--) {
		int op;
		scanf("%d", &op);
//		printf("%d\n",op);
		if (op == 1) {
			ll x;
			scanf("%lld", &x);
			push(x);
		}
		if (op == 2)printf("%lld\n", heap[1]);
		else pop();
	}
//  fclose(stdin);
//  fclose(stdout);
	return 0;
}

悬赏关注一个

2023/1/2 21:10
加载中...