Pagini recente » Cod sursa (job #1275870) | Cod sursa (job #158113) | Cod sursa (job #2595354) | Cod sursa (job #2621791) | Cod sursa (job #593592)
Cod sursa(job #593592)
#define _CRT_SECURE_NO_DEPRECATE
#include <stdlib.h>
#include <stdio.h>
FILE static *fi,*fo;
int static heap[200000],num,ri[200000],at[200000],atnum;
inline int father(int x) { return x/2; }
inline int son_left(int x) { return x*2; }
inline int son_right(int x) { return x*2+1; }
inline int min() {return heap[1];}
//static func
inline void swp(int a,int b)
{
int register c;
c=heap[a];
heap[a]=heap[b];
heap[b]=c;
c=ri[a];
ri[a]=ri[b];
ri[b]=c;
c=at[ri[a]];
at[ri[a]]=at[ri[b]];
at[ri[b]]=c;
}
inline void sift(int x)
{
while (1)
{
int a,b;
a=son_left(x);
b=a+1;
if (a>num) break;
else
if(b>num)
if (heap[x]>heap[a]) {swp(x,a); x=a;}
else break;
else
if(heap[x]>heap[a])
if (heap[b]<heap[a]) {swp(x,b); x=b;}
else {swp(x,a); x=a;}
else
if(heap[x]>heap[b]) {swp(x,b); x=b;}
else break;
}
}
inline void percolate(int x)
{
int a;
while ((heap[a=father(x)]>heap[x])&&x>1)
{
swp(a,x);
x=a;
}
}
inline void add(int x)
{
num++;
atnum++;
heap[num]=x;
ri[num]=atnum;
at[atnum]=num;
percolate(num);
}
inline void cut(int x)
{
swp(x,num);
heap[num]=0;
at[ri[num]]=0;
ri[num]=0;
num--;
sift(x);
}
int main()
{
fi = fopen("heapuri.in","r");
fo = fopen("heapuri.out","w");
int a,b,n;
fscanf(fi,"%d",&n);
while (n--)
{
fscanf(fi,"%d",&a);
if (a == 1)
{
fscanf(fi,"%d",&b);
add(b);
}
if (a == 2)
{
fscanf(fi,"%d",&b);
cut(at[b]);
}
if (a == 3)
{
fprintf(fo,"%d\n",min());
}
}
fclose(fi);
fclose(fo);
return 0;
}