Pagini recente » Cod sursa (job #1251818) | Cod sursa (job #1371090) | Cod sursa (job #382608) | Cod sursa (job #1611548) | Cod sursa (job #2099648)
#include<bits/stdc++.h>
using namespace std;
int H[200100],N,L,n, poz[200100],t,x, A[200100];
void heapifyup(int i) {
if (i==1) return;
if (A[H[i]]<A[H[i/2]]) {
swap(H[i], H[i/2]);
poz[H[i]]=i;
poz[H[i/2]]=i/2;
heapifyup(i/2);
} else return;
}
void add(int val) {
N++; L++;
A[N]=val;
H[L]=N;
poz[N]=L;
heapifyup(L);
}
void heapifydown(int i) {
int minl=i;
if (2*i<=L && A[H[i]]>A[H[2*i]]) minl=2*i;
if (2*i+1<=L && A[H[minl]]>A[H[2*i+1]]) minl=2*i+1;
if (minl!=i) {
swap(H[minl],H[i]);
poz[H[minl]]=minl;
poz[H[i]]=i;
heapifydown(minl);
}
}
void del(int x) {
swap(H[poz[x]], H[L]);
poz[H[poz[x]]]=poz[x];
L--;
int i=poz[x];
if (A[H[i/2]]>A[H[i]]) {
heapifyup(poz[x]);
} else heapifydown(poz[x]);
}
int main() {
ifstream cin("heapuri.in");
ofstream cout("heapuri.out");
cin>>t;
while (t--) {
cin>>x;
switch (x) {
case 1: {
cin>>x;
add(x);
break;
}
case 2: {
cin>>x;
del(x);
break;
}
case 3: {
cout<<A[H[1]]<<'\n';
break;
}
}
}
return 0;
}