Pagini recente » Cod sursa (job #3041456) | Cod sursa (job #1696289) | Cod sursa (job #2085753) | Cod sursa (job #387845) | Cod sursa (job #1562414)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
const int NMAX=200005;
int n,a[NMAX],h[NMAX],poz[NMAX];
int len,cnt;
void swp(int x,int y)
{
swap(a[x],a[y]);
swap(h[x],h[y]);
swap(poz[h[x]],poz[h[y]]);
}
void heapup(int x)
{
while (x>1 && a[x]<a[x>>1])
{
swp(x,x>>1);
x>>=1;
}
}
void heapdown(int x)
{
int mn,pz;
bool ok=1;
while (ok)
{
mn=1<<30;ok=0;
if (2*x<=len && a[2*x]<mn) {mn=a[2*x];pz=2*x;}
if ((2*x+1)<=len && a[2*x+1]<mn) {mn=a[2*x+1];pz=2*x+1;}
if (mn!=(1<<30))
{
ok=1;
swp(x,pz);
x=pz;
}
}
}
int main()
{
int i,op,x;
fin>>n;
for (i=1;i<=n;i++)
{
fin>>op;
if (op==1)
{
fin>>a[++len];
cnt++;
h[len]=cnt;
poz[cnt]=len;
heapup(len);
}
if (op==2)
{
fin>>x;
x=poz[x];
swap(a[x],a[len]);
swap(h[x],h[len]);
swap(poz[h[x]],poz[h[len]]);
len--;
heapdown(x);
}
if (op==3) fout<<a[1]<<"\n";
}
return 0;
}