Pagini recente » Cod sursa (job #2569059) | Cod sursa (job #309314) | Cod sursa (job #2223330) | Cod sursa (job #2683260) | Cod sursa (job #425972)
Cod sursa(job #425972)
#include <fstream>
using namespace std;
int v[1<<18],n;
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()
{
for (int i=n/2;i;i--)
redo(i);
}
void add(int x)
{
v[++n]=x;
make();
}
void remove(int x)
{
v[x]=v[n--];
make();
}
int minim()
{
int minim=2000000000,i;
for (i=1;i<=n;i++)
if (minim>v[i])
minim=v[i];
return minim;
}
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;
}