Pagini recente » Cod sursa (job #2913222) | Cod sursa (job #3299698) | Cod sursa (job #1177833) | Cod sursa (job #3174955) | Cod sursa (job #857126)
Cod sursa(job #857126)
#include <stdio.h>
using namespace std;
int h[200010],op,i,n,y,x,j,v[200010],s,z;
void heapup(int k)
{
if (k<2) return;
int t=k/2;
if (h[t]>h[k])
{
int x;
x=h[t]; h[t]=h[k]; h[k]=x;
heapup(t);
}
}
void heapdw(int k, int n)
{
int st,dr,i;
if (k>=n) return;
if (2*k<=n) st=2*k; else return;
if (2*k+1<=n) dr=2*k+1; else dr=200010;
if (h[st]<h[dr] || dr==200010)
{
x=h[st]; h[st]=h[k]; h[k]=x;
heapdw(st,n);
}
else
if (dr!=200010)
{
x=h[dr]; h[dr]=h[k]; h[k]=x;
heapdw(dr,n);
}
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d\n",&s);
for (i=1; i<=s; i++)
{
scanf("%d",&op);
if (op==3) printf("%d\n",h[1]);
else
if (op==1)
{
scanf("%d\n",&x);
n++;
h[n]=x;
v[n]=x;
heapup(n);
}
else
{
scanf("%d\n",&x);
for (j=1; j<=n; j++)
if (h[j]==v[x]) {y=j; break;}
z=h[y]; h[y]=h[n]; h[n]=z;
n--;
heapdw(y,n);
}
}
return 0;
}