Pagini recente » Cod sursa (job #3172131) | Cod sursa (job #46892) | Cod sursa (job #582043) | Cod sursa (job #1388920) | Cod sursa (job #2190220)
#include <fstream>
using namespace std;
ifstream in("heapuri.in");
ofstream out("heapuri.out");
const int N=200001;
const int maxim=1000001;
int h[N],nh,poz[5*N],v[N],n;
int urca(int p)
{
while(p>1 && h[p]<h[p/2])
{
swap(h[p],h[p/2]);
swap(poz[h[p]],poz[h[p/2]]);
p=p/2;
}
return p;
}
void adauga(int val)
{
h[++nh]=val;
int p=urca(nh);
poz[val]=p;
}
void coboara(int p)
{
int fs=p*2,fd=p*2+1,bun=p;
if(fs<=nh && h[fs]<h[bun])
bun=fs;
if(fd<=nh && h[fd]<h[bun])
bun=fd;
if(bun!=p)
{
swap(h[p],h[bun]);
swap(poz[h[p]],poz[h[bun]]);
coboara(bun);
}
}
int main()
{
in>>n;
int c,x,elem;
for(int i=1;i<=n;i++)
{
in>>c;
if(c==1)
{
in>>x;
adauga(x);
v[nh]=x;
}
else if(c==2)
{
in>>x;
elem=v[x];
v[x]=maxim;
int p=poz[elem];
h[p]=maxim;
coboara(p);
nh--;
//for(i=1;i<=4;i++)
//out<<h[i]<<' ';
//out<<'\n';
}
else
out<<h[1]<<'\n';
}
return 0;
}