Pagini recente » Cod sursa (job #76772) | Cod sursa (job #1269727) | Rating Cornea Cristian (cristi1990an) | Cod sursa (job #2405963) | Cod sursa (job #1237625)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int n,i,m,inst,x,y,j;
struct Heap
{
int val,poz;
};
Heap a[200005];
void HeapUp(int i)
{
if(i==1)
return;
else if(a[i].val<a[i/2].val)
{
swap(a[i],a[i/2]);
HeapUp(i/2);
}
}
void HeapDown(int i,int m)
{
int dr,st;
if(2*i<=m)
st=a[2*i].val;
else return;
if(2*i+1<=m)
dr=a[2*i+1].val;
else dr=st+1;
if(dr<st&&dr<a[i].val)
{
swap(a[i],a[2*i+1]);
HeapDown(2*i+1,m);
}
else if(st<a[i].val)
{
swap(a[i],a[2*i]);
HeapDown(2*i,m);
}
return;
}
int main()
{
f>>n;
m=0;
for(i=1; i<=n; i++)
{
f>>inst;
if(inst==1)
{
f>>a[++m].val;
a[m].poz=m;
HeapUp(m);
}
if(inst==2)
{
f>>x;
y=0;
j=0;
while(y==0&&j<m)
if(a[++j].poz==x)
y=j;
swap(a[y],a[m]);
m--;
HeapDown(y,m);
}
if(inst==3)
g<<a[1].val<<'\n';
}
return 0;
}