Pagini recente » Cod sursa (job #3210368) | Cod sursa (job #665512) | Cod sursa (job #98282) | Cod sursa (job #1417148) | Cod sursa (job #3243960)
#include <bits/stdc++.h>
using namespace std;
ifstream f("heaps.in");
ofstream g("heaps.out");
struct pereche{ int val;
int ord;
} H[100001];
int n,m,tip,x,v[100001],k;
int mycmp(pereche a, pereche b)
{ return a.val<b.val;
}
void comb(int i,int n)
{ pereche x=H[i];
int tata=i,fiu=2*i;
while(fiu<=n)
{ if(fiu<n && mycmp(H[fiu+1],H[fiu]));
if(mycmp(H[fiu],x))
{ H[tata]=H[fiu];
v[H[tata].ord]=fiu;
tata=fiu;
fiu=2*fiu;
}
else fiu=n+1;
}
H[tata]=x;
v[x.ord]=tata;
}
void insert_heap(pereche y)
{ n++;
int tata=n/2,fiu=n;
while(tata && mycmp(y,H[tata]))
{ H[fiu]=H[tata];
v[H[fiu].ord]=v[H[tata].ord];
v[H[tata].ord]=fiu;
fiu=tata;
tata=fiu/2;
}
H[fiu]=y;
v[y.ord]=fiu;
}
void stergere_heap(int i)
{ H[i]=H[n];
v[H[n].ord]=1;
n--;
int tata=i,fiu=2*i;
pereche x=H[i];
while(fiu<=n)
{ if(fiu<n && mycmp(H[fiu+1],H[fiu]));
if(mycmp(H[fiu],x))
{ H[tata]=H[fiu];
v[H[tata].ord]=fiu;
tata=fiu;
fiu=2*fiu;
}
else fiu=n+1;
}
H[tata]=x;
v[x.ord]=tata;
}
int main()
{ f>>m;
while(m--)
{ f>>tip;
if(tip==1)
{ f>>x;
v[++k]=k;
pereche y={x,k};
insert_heap(y);
}
else if(tip==2)
{ f>>x;
stergere_heap(v[x]);
}
else g<<H[1].val<<'\n';
}
return 0;
}