Pagini recente » Cod sursa (job #1841504) | Cod sursa (job #1479356) | Cod sursa (job #1062917) | Cod sursa (job #1473226) | Cod sursa (job #1952473)
#include <bits/stdc++.h>
#define NMAX 200005
using namespace std;
ifstream fin ("heapuri.in");
ofstream fout ("heapuri.out");
int H[NMAX],P[NMAX],V[NMAX],N,NR;
void UpHeap(int k){
if( k > 1 && V[H[k]] < V[H[k >> 1]]){
swap(H[k],H[k >> 1]);
P[H[k]] = k;
P[H[k >> 1]] = k >> 1;
UpHeap(k >> 1);
}
}
void DownHeap(int k){
int son = k << 1;;
if(V[H[k]] > V[H[son]] && son <= N){
swap(H[k],H[son]);
P[H[k]] = k;
P[H[son]] = son;
DownHeap(son);
}
son = (k << 1) + 1;
if(V[H[k]] > V[H[son]] && son <= N){
swap(H[k],H[son]);
P[H[k]] = k;
P[H[son]] = son;
DownHeap(son);
}
}
int main()
{
ios :: sync_with_stdio(false);
int n,t,x;
fin >> n;
while(n--){
fin >> t;
if(t == 1){
fin >> x;
V[++NR] = x;
H[++N] = NR;
P[NR] = N;
UpHeap(N);
}
if(t == 2){
fin >> x;
int p = P[x];
P[H[N]] = p;
swap(H[p],H[N]);
N--;
UpHeap(p);
DownHeap(p);
}
if(t == 3)
fout << V[H[1]] << "\n";
}
return 0;
}