Pagini recente » Cod sursa (job #2963436) | Cod sursa (job #2835432) | Cod sursa (job #2669727) | Cod sursa (job #91158) | Cod sursa (job #2287467)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int a[200010],poz[200010],MinHeap[200010],n,q,d;
void HeapUp(int x)
{
while(x/2>0 && a[MinHeap[x]]<a[MinHeap[x/2]])
{
swap(MinHeap[x],MinHeap[x/2]);
poz[MinHeap[x]]=x;
poz[MinHeap[x/2]]=x/2;
x=x/2;
}
}
void HeapDown(int x)
{
bool sw;
sw=1;
while(sw==1)
{
sw=0;
if(x*2<=n)
{
if(x*2+1<=n)
{
if(a[MinHeap[x*2]]<a[MinHeap[x*2+1]])
{
if(a[MinHeap[x]]>a[MinHeap[x*2]])
{
swap(MinHeap[x],MinHeap[x*2]);
poz[MinHeap[x]]=x;
poz[MinHeap[x*2]]=x*2;
x=x*2;
sw=1;
}
}
else
{
if(a[MinHeap[x]]>a[MinHeap[x*2+1]])
{
swap(MinHeap[x],MinHeap[x*2+1]);
poz[MinHeap[x]]=x;
poz[MinHeap[x*2+1]]=x*2+1;
sw=1;
x=x*2+1;
}
}
}
else
{
if(a[MinHeap[x]]>a[MinHeap[x*2]])
{
swap(MinHeap[x],MinHeap[x*2]);
poz[MinHeap[x]]=x;
poz[MinHeap[x*2]]=x*2;
x=x*2;
sw=1;
}
}
}
}
}
int main()
{
int op,val,i,x;
f>>q;
while(q--)
{
f>>op;
if(op==1)
{
f>>val;
n++;
d++;
a[d]=val;
MinHeap[n]=d;
poz[d]=n;
HeapUp(n);
}
if(op==2)
{
f>>val;
a[val]=-1;
HeapUp(poz[val]);
MinHeap[1]=MinHeap[n];
n--;
poz[MinHeap[1]]=1;
HeapDown(1);
}
if(op==3)
{
g<<a[MinHeap[1]]<<"\n";
}
}
return 0;
}