Pagini recente » Cod sursa (job #668099) | Cod sursa (job #2560770) | Cod sursa (job #1235305) | Cod sursa (job #924114) | Cod sursa (job #235836)
Cod sursa(job #235836)
#include <cstdio>
#define MAX_N 200005
#define DIM 8192
int A[MAX_N], Pos[MAX_N], H[MAX_N];
int N, T, Nh, ind = DIM-1;
char buf[DIM];
void read(int &x)
{
x = 0;
while((buf[ind] > '9') || (buf[ind] < '0'))
if(++ind == DIM)
fread(buf, DIM, sizeof (char), stdin), ind = 0;
while((buf[ind] <= '9') && (buf[ind] >= '0'))
{
x = x*10 + buf[ind] - '0';
if(++ind == DIM)
fread(buf, DIM, sizeof (char), stdin), ind = 0;
}
}
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]);
swap(A[i], A[N]);
Pos[A[i]] = i;
Pos[A[N]] = N;
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);
read(T);
while(T--)
{
int tip, x;
read(tip);
if(tip == 1)
{
read(x);
A[++N] = ++Nh;
Pos[Nh] = Nh;
H[N] = x;
insert(x);
}
if(tip == 2)
{
read(x);
erase(Pos[x]);
}
if(tip == 3)
printf("%d\n", H[1]);
}
}