Pagini recente » Cod sursa (job #2365697) | Cod sursa (job #3255971) | Cod sursa (job #2774932) | Cod sursa (job #2048556) | Cod sursa (job #819537)
Cod sursa(job #819537)
#include<fstream>
#define NMAX 200002
using namespace std;
int n;
int h[NMAX];
int vh[NMAX],hv[NMAX];
ifstream in("heapuri.in");
ofstream out("heapuri.out");
void addToHeap(int k)
{
int aux;
if (k/2==0)
return;
if (h[k/2]>h[k])
{
aux=h[k/2];
h[k/2]=h[k];
h[k]=aux;
vh[hv[k]]=k/2;
vh[hv[k/2]]=k;
/* aux=vh[hv[k]];
vh[hv[k]]=vh[hv[k/2]];
vh[hv[k/2]= aux;*/
aux=hv[k];
hv[k]=hv[k/2];
hv[k/2]=aux;
}
}
void down(int k)
{
int aux;
int fs,fd;
fs=k<<1;
fd=(k<<1)+1;
if (fd<=h[0])
{
if (h[fd]<h[fs])
{
aux=h[fd];
h[fd]=h[k];
h[k]=aux;
vh[hv[k]]=fd;
vh[hv[fd]]=k;
aux=hv[k];
hv[k]=hv[fd];
hv[fd]=aux;
down(fd);
return;
}
}
if (fs<=h[0])
{
aux=h[fs];
h[fs]=h[k];
h[k]=aux;
vh[hv[k]]=fs;
vh[hv[fs]]=k;
aux=hv[k];
hv[k]=hv[fs];
hv[fs]=aux;
down(fs);
return;
}
}
void eraseFromHeap(int k)
{
h[k]=h[h[0]];
vh[hv[h[0]]]=k;
hv[k]=hv[h[0]];
h[0]--;
down(k);
}
void operatii()
{
int op,x;
h[0]=0;
in>>n;
for (int i=1;i<=n;i++)
{
in>>op;
switch(op)
{
case 1:{in>>x;h[++h[0]]=x;vh[++vh[0]]=h[0];hv[h[0]]=vh[0];addToHeap(h[0]);break;}
case 2:{in>>x;
eraseFromHeap(vh[x]);break;}
case 3:{out<<h[1]<<"\n";break;}
}
}
}
int main()
{
operatii();
return 0;
}