Pagini recente » Cod sursa (job #1874475) | Cod sursa (job #1085754) | Cod sursa (job #266721) | Cod sursa (job #897771) | Cod sursa (job #713798)
Cod sursa(job #713798)
#include<iostream>
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
vector<long long > v;
long long n,a,z,p[200000],pp[200000],x,y,k=0;
void del(int k)
{p[pp[v.size()-1]]=k;
pp[k]=pp[v.size()-1];
swap(v[k],v[v.size()-1]);
v.pop_back();
if(v[k]<v[k/2])
while(k>1)
if(v[k]<v[k/2])
{swap(v[k],v[k/2]);
p[pp[k/2]]=k;
p[pp[k]]=k/2;
swap(pp[k],pp[k/2]);
k=k/2;}
else
break;
else
if(v[k]>v[k*2]||v[k]>v[k*2+1])
while(k*2<=v.size()-1)
if(k*2+1>v.size()-1)
if(v[k]>v[k*2])
{swap(v[k],v[k*2]);
p[pp[k]]=k*2;
p[pp[k*2]]=k;
swap(pp[k],pp[k*2]);
k=k*2;}
else
if(v[k]>v[k*2]&&v[k*2]<=v[k*2+1])
{swap(v[k],v[k*2]);
p[pp[k]]=k*2;
p[pp[k*2]]=k;
swap(pp[k],pp[k*2]);
k=k*2;}
else
if(v[k]>v[k*2+1]&&v[k*2+1]<v[k*2])
{swap(v[k],v[k*2+1]);
p[pp[k]]=k*2+1;
p[pp[k*2+1]]=k;
swap(pp[k],pp[k*2+1]);
k=k*2+1;}
else
break;
}
void add(int a)
{
v.push_back(a);
z=v.size()-1;
p[k]=z;
pp[z]=k;
while(z>1)
if(v[z]<v[z/2])
{swap(v[z],v[z/2]);
p[pp[z]]=z/2;
p[pp[z/2]]=z;
swap(pp[z],pp[z/2]);
z=z/2;}
else
break;}
int main()
{
ofstream h("heapuri.out");
ifstream f("heapuri.in");
v.push_back(-0x3f3f3f3f);
f>>n;
for(int i=1;i<=n;i++)
{f>>x;
if(x==1)
{f>>y;
k++;
add(y);}
else
if(x==2)
{f>>y;
del(p[y]);}
else
h<<v[1]<<"\n";}
return 0;}