Pagini recente » Cod sursa (job #1491952) | Monitorul de evaluare | Cod sursa (job #2438631) | Cod sursa (job #1549141) | Cod sursa (job #758579)
Cod sursa(job #758579)
#include<fstream>
using namespace std;
int v[200005],poz[200005],el,elr;
void swap(int a,int b)
{
int aux;
aux=v[a];
v[a]=v[b];
v[b]=aux;
aux=poz[a];
poz[a]=poz[b];
poz[b]=aux;
}
void Act(int loc)
{
while(v[loc/2]>v[loc] && loc/2>0)
{
swap(loc/2,loc);
loc=loc/2;
}
}
void add(int val)
{
el++;
elr++;
v[el]=val;
poz[el]=elr;
Act(el);
}
void down(int loc)
{
int s=loc*2,d=loc*2+1,fk=loc;
if(s<=el && v[s]<v[fk])
fk=s;
if(d<=el && v[d]<v[fk])
fk=d;
if(fk!=loc)
{
swap(fk,loc);
down(fk);
}
}
void del(int val)
{
int i;
for(i=1;i<=el;i++)
if(poz[i]==val)
break;
v[i]=v[el];
poz[i]=poz[el];
el--;
Act(i);
down(i);
}
int main ( )
{
int n,x,y;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
f>>n;
for(int i=1;i<=n;i++)
{
f>>x;
if(x==1)
{
f>>y;
add(y);
}
else if(x==2)
{
f>>y; del(y);
}
else
g<<v[1]<<'\n';
}
}