Pagini recente » Cod sursa (job #505349) | Borderou de evaluare (job #1636161) | Borderou de evaluare (job #1133772) | Cod sursa (job #1984188) | Cod sursa (job #1051116)
#include <iostream>
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
struct heapy
{
long val,poz,ord;
}heap[2000005];
long nr,k;
long i,x,tip;
void urca(long &n,long pozi)
{
while(pozi>1&& heap[pozi].val<heap[pozi/2].val)
{
swap(heap[pozi],heap[pozi/2]);
pozi/=2;
}
}
void coboara(long &n,long pozi)
{
{
long poz1=0;
while(pozi!=poz1) {
poz1=pozi;
if(2*poz1<=n && heap[pozi].val>heap[2*pozi].val)
pozi=2*poz1;
if(2*poz1+1<=n && heap[pozi].val>heap[2*poz1+1].val)
pozi=2*poz1+1;
swap(heap[pozi],heap[poz1]);
}
}}
int main()
{long n=0,j,y;
f>>nr;
for(i=1;i<=nr;i++)
{
f>>tip;
if(tip==1)
{k++;
f>>x;
heap[++n].val=x;
heap[n].ord=k;
heap[n].poz=n;
urca(n,n);
}
else if(tip==2)
{
f>>x;
for(j=1;heap[j].ord!=x;j++);
heap[j].val=heap[n].val;
heap[j].ord=heap[n].ord;
y=heap[j].poz;
urca(n,y);
coboara(n,1);
}
else
{
g<<heap[1].val<<'\n';
}
}
return 0;
}