Pagini recente » Cod sursa (job #2937540) | Cod sursa (job #2001743) | Cod sursa (job #2682034) | Cod sursa (job #521124) | Cod sursa (job #235789)
Cod sursa(job #235789)
#include <cstdio>
#define MAX_N 200005
int A[MAX_N], Pos[MAX_N], H[MAX_N];
int N, T;
void swap(int &x, int &y)
{
int aux = x;
x = y;
y = aux;
}
void insert(int k)
{
int i = N;
while(i/2 && H[i/2] > H[i])
{
swap(H[i], H[i/2]);
swap(A[i], A[i/2]);
Pos[A[i]] = i;
Pos[A[i/2]] = i/2;
i /= 2;
}
}
void erase(int i)
{
swap(H[i], H[N]);
A[i] = A[N];
Pos[A[i]] = i;
N--;
while(1)
{
int j = 2*i;
if(j > N) break;
if(H[j+1] < H[j] && (j+1) <= N) ++j;
if(H[j] > H[i]) break;
swap(H[j], H[i]);
swap(A[j], A[i]);
Pos[A[i]] = i;
Pos[A[j]] = j;
i = j;
}
}
int main()
{
freopen("heapuri.in","rt",stdin);
freopen("heapuri.out","wt",stdout);
scanf("%d",&T);
while(T--)
{
int tip, x;
scanf("%d ",&tip);
if(tip == 1)
{
scanf("%d",&x);
A[++N] = N;
Pos[N] = N;
H[N] = x;
insert(x);
}
if(tip == 2)
{
scanf("%d",&x);
erase(Pos[x]);
}
if(tip == 3)
printf("%d\n", H[1]);
}
}