Pagini recente » Cod sursa (job #2124306) | Cod sursa (job #536486) | Cod sursa (job #1775712) | Cod sursa (job #2296869) | Cod sursa (job #426436)
Cod sursa(job #426436)
#include <fstream>
using namespace std;
int v[1<<18],n,sir[1<<18];
void redo(int x)
{
int l=2*x,r=2*x+1,maxim=x,aux;
if (v[l]>v[maxim])
maxim=l;
if (v[r]>v[maxim])
maxim=l;
if (x!=maxim)
{
aux=v[maxim];
v[maxim]=v[x];
v[x]=aux;
redo(maxim);
}
}
void make()
{
int i;
for (i=1;i<=n;i++)
v[i]=sir[i];
for (i=n/2;i;i--)
redo(i);
}
void add(int x)
{
sir[++n]=x;
}
void remove(int x)
{
sir[x]=v[n--];
}
int minim()
{
make();
return v[1];
}
int main()
{
int nr,x;
ifstream in("heapuri.in");
ofstream out("heapuri.out");
in>>nr;
while (nr--)
{
in>>x;
switch(x)
{
case 1:in>>x;add(x);break;
case 2:in>>x;remove(x);break;
case 3:out<<minim()<<"\n";break;
}
}
return 0;
}