Pagini recente » Cod sursa (job #3137171) | Cod sursa (job #2178334) | Cod sursa (job #3190513) | Cod sursa (job #3223763) | Cod sursa (job #1744375)
#include <iostream>
#include <fstream>
using namespace std;
int heap[200001],n,a[200001],nr;
void HeapUp(int v)
{
int aux,k=heap[v];
while(v>0 && k<heap[v/2])
{
aux=heap[v];
heap[v]=heap[v/2];
heap[v/2]=aux;
v=v/2;
}
heap[v]=k;
}
void HeapDown(int v)
{
int w=v*2,aux;
while(w<=nr)
{
if(w+1<=nr && heap[w+1]<heap[w])
{
w++;
}
if(heap[v]<=heap[w])
{
return;
}
aux=heap[v];
heap[v]=heap[w];
heap[w]=aux;
v=w;
w=w*2;
}
}
int cauta(int k)
{
int i;
for(i=1;i<=nr;i++)
{
if(heap[i]==k)
{
return i;
}
}
}
int main()
{
int i,t,x,r;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
f>>n;
for(i=1;i<=n;i++)
{
f>>t;
if(t==1)
{
f>>x;
nr++;
a[nr]=x;
heap[nr]=x;
HeapUp(nr);
}
if(t==2)
{
f>>x;
r=cauta(a[x]);
heap[r]=heap[nr--];
if(r>0 && heap[r]<heap[r/2])
{
HeapUp(r);
}
else
{
HeapDown(r);
}
}
if(t==3)
{
g<<heap[1]<<" ";
}
}
return 0;
}