Pagini recente » Cod sursa (job #780645) | Cod sursa (job #226367) | Cod sursa (job #558515) | Cod sursa (job #1664994) | Cod sursa (job #1237662)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int n,i,m,inst,x,nr,b[200005],y;
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]);
swap(b[a[i].poz],b[a[i/2].poz]);
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]);
swap(b[a[i].poz],b[a[2*i+1].poz]);
HeapDown(2*i+1,m);
}
else if(st<a[i].val)
{
swap(a[i],a[2*i]);
swap(b[a[i].poz],b[a[2*i].poz]);
HeapDown(2*i,m);
}
return;
}
int main()
{
f>>n;
nr=0;
m=0;
for(i=1; i<=n; i++)
{
f>>inst;
if(inst==1)
{
nr++;
m++;
b[nr]=m;
f>>a[m].val;
a[m].poz=nr;
HeapUp(m);
}
if(inst==2)
{
f>>x;
y=b[x];
swap(a[b[x]],a[m]);
swap(b[a[b[x]].poz],b[a[m].poz]);
m--;
HeapDown(y,m);
}
if(inst==3)
g<<a[1].val<<'\n';
}
return 0;
}