Pagini recente » Cod sursa (job #1398921) | Cod sursa (job #1584630) | Cod sursa (job #1791761) | Cod sursa (job #825909) | Cod sursa (job #793900)
Cod sursa(job #793900)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("Heapuri.in");
ofstream fout("Heapuri.out");
int v[200000],vp=1,poz[200000],h[200000],lungime=0;
int coboara(int nr);
int urca(int n);
void build();
void stergepoz(int a);
void sterge(int a);
void adauga(int a);
int main()
{
int i,j,n;
fin>>n;
for(i=0;i<n;i++)
{
h[i]=i;
poz[i]=i;
fin>>j;
if(j==1)
{
fin>>j;
adauga(j);
continue;
}
if(j==2)
{
fin>>j;
sterge(h[j]);
}
if(j==3)
{
fout<<v[1]<<"\n";
}
}
return 0;
}
int coboara(int nr)
{
int i= nr*2,c;
while(i<=lungime)
{
if(v[i]>v[i+1]) i++;
if(v[i]>v[nr]) return 0;
h[poz[i]]=nr;
h[poz[nr]]=i;
c=v[i];v[i]=v[nr];v[nr]=c;
c=poz[i];poz[i]=poz[nr];poz[nr]=c;
nr=i;i=i*2;
}
}
int urca(int a)
{
int i=a/2;
int c;
while(i>=1)
{
if(v[a]>v[i]) return 0;
h[poz[a]]=i;
h[poz[i]]=a;
c=v[a];v[a]=v[i];v[i]=c;
c=poz[a];poz[a]=poz[i];poz[i]=c;
a=i;i=i/2;
}
}
void build()
{
int i;
for(i=lungime/2;i>0;i--)
{
coboara(i);
}
}
void sterge(int a){
v[a]=v[lungime--];
if(v[a]<v[a/2])
urca(a);
if(v[a]>v[a*2]||v[a]<v[a*2+1])
coboara(a);
}
void adauga(int a)
{
v[++lungime]=a;
urca(lungime);
}
void stergepoz(int a)
{
sterge(poz[a]);
}