Pagini recente » Cod sursa (job #2977263) | Cod sursa (job #3175487) | Cod sursa (job #2752713) | Cod sursa (job #2224962) | Cod sursa (job #2460874)
#include <bits/stdc++.h>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
const int N = 200010;
int n,o,k,lheap,x,val[N],heap[N],pozHeap[N];
void swapHeap(int poz1,int poz2)
{
swap(heap[poz1],heap[poz2]);
pozHeap[heap[poz1]]=poz1;
pozHeap[heap[poz2]]=poz2;
}
void heapUp(int fiu)
{
int tata=fiu/2;
if(!tata)
return;
if(val[heap[fiu]]<val[heap[tata]])
{
swapHeap(fiu,tata);
heapUp(tata);
}
}
void heapDown(int tata)
{
int fiu=2*tata;
if(fiu>lheap)return;
if(fiu<lheap)if(val[heap[fiu+1]]<val[heap[fiu]])fiu++;
if(val[heap[fiu]]<val[heap[tata]])
{
swapHeap(fiu,tata);
heapDown(fiu);
}
}
int main()
{
f >> n ;
for(int i=1;i<=n;i++)
{
f>>o;
if(o==1)
{
k++;
f>>val[k];
heap[++lheap]=k;
pozHeap[k]=lheap;
heapUp(lheap);
}
else
if(o==2)
{
f>>x;
x=pozHeap[x];
swapHeap(x,lheap);
lheap--;
heapUp(x);
heapDown(x);
}
else
g<<val[heap[1]]<<'\n';
}
return 0;
}