Pagini recente » Cod sursa (job #1286692) | Cod sursa (job #842994) | Cod sursa (job #1766969) | Cod sursa (job #2287359) | Cod sursa (job #713800)
Cod sursa(job #713800)
#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>>1])
while(k>1)
if(v[k]<v[k>>1])
{swap(v[k],v[k>>1]);
p[pp[k>>1]]=k;
p[pp[k]]=k>>1;
swap(pp[k],pp[k>>1]);
k=k>>1;}
else
break;
else
if(v[k]>v[k<<1]||v[k]>v[k<<1+1])
while(k<<1<=v.size()-1)
if(k<<1+1>v.size()-1)
if(v[k]>v[k<<1])
{swap(v[k],v[k<<1]);
p[pp[k]]=k<<1;
p[pp[k<<1]]=k;
swap(pp[k],pp[k<<1]);
k=k<<1;}
else
if(v[k]>v[k<<1]&&v[k<<1]<=v[k<<1+1])
{swap(v[k],v[k<<1]);
p[pp[k]]=k<<1;
p[pp[k<<1]]=k;
swap(pp[k],pp[k<<1]);
k=k<<1;}
else
if(v[k]>v[k<<1+1]&&v[k<<1+1]<v[k<<1])
{swap(v[k],v[k<<1+1]);
p[pp[k]]=k<<1+1;
p[pp[k<<1+1]]=k;
swap(pp[k],pp[k<<1+1]);
k=k<<1+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>>1])
{swap(v[z],v[z>>1]);
p[pp[z]]=z>>1;
p[pp[z>>1]]=z;
swap(pp[z],pp[z>>1]);
z=z>>1;}
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;}