Pagini recente » Cod sursa (job #1174933) | Cod sursa (job #1209527) | Cod sursa (job #234872) | Cod sursa (job #1087221) | Cod sursa (job #2617681)
#include<fstream>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int n,i,op,x,poz[200001],nr,s,p;
struct elem
{
int val,ord;
};
elem heap[200001];
int main()
{
fin>>n;
for(i=1;i<=n;i++)
{
fin>>op;
if(op==1)
{
fin>>x;
nr++;
s++;
heap[s].val=x;
heap[s].ord=nr;
p=s;
while(p>1&&heap[p].val<heap[p/2].val)
{
swap(heap[p],heap[p/2]);
swap(poz[heap[p].ord],poz[heap[p/2].ord]);
p/=2;
}
}
else if(op==2)
{
fin>>x;
int k=poz[x];
swap(heap[s],heap[k]);
swap(poz[heap[s].ord],poz[heap[k].ord]);
heap[s]={0,0};
s--;
p=k;
while(p>1&&heap[p].val<heap[p/2].val)
{
swap(heap[p],heap[p/2]);
swap(poz[heap[p].ord],poz[heap[p/2].ord]);
p/=2;
}
while(p<=s&&heap[p].val>heap[p*2+1].val)
{
swap(heap[p],heap[p*2+1]);
swap(poz[heap[p].ord],poz[heap[p*2+1].ord]);
p=p*2+1;
}
}
else fout<<heap[1].val<<"\n";
}
}