Cod sursa(job #959902)
Utilizator | Data | 9 iunie 2013 13:03:21 | |
---|---|---|---|
Problema | Heapuri | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.88 kb |
#include <fstream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int n, t, m, nr, x, aux, pc, p, c, h[200010], a[200010], v[200010];
int main(){
f>>n;
for(;n;n--)
{
f>>t;
if(t==3)
g<<v[ h[1] ]<<"\n";
else if(t==1)
{
f>>v[++nr];
m++;
a[nr]=m;
h[m]=nr;
c=m;
p=c/2;
while(p>=1 && v[ h[c] ]<v[ h[p] ])
{
aux=h[c];
h[c]=h[p];
h[p]=aux;
a[ h[c] ]=c;
a[ h[p] ]=p;
c=p;
p=p/2;
}
}
else
{
f>>x;
h[ a[x] ]=h[m--];
pc=a[x];
if(pc/2!=0 && v[ h[pc] ]<v[ h[pc/2] ])
{
c=pc;
p=c/2;
while(p!=0 && v[ h[c] ]<v[ h[p] ])
{
aux=h[c];
h[c]=h[p];
h[p]=aux;
a[ h[c] ]=c;
a[ h[p] ]=p;
c=p;
p=p/2;
}
}
else
{
p=pc;
c=2*p;
while(c<=m)
{
if(c+1<=m && v[ h[c+1] ]<v[ h[c] ])
c++;
if(v[ h[p] ]>v[ h[c] ])
{
aux=h[p];
h[p]=h[c];
h[c]=aux;
a[ h[c] ]=c;
a[ h[p] ]=p;
p=c;
c=2*c;
}
else
break;
}
}
}
}
return 0;
}