Pagini recente » Cod sursa (job #2213856) | Cod sursa (job #2271244) | Cod sursa (job #1761612) | Clasament simulare04032019 | Cod sursa (job #1805869)
#include <fstream>
#define NMAX 200000
using namespace std;
struct heap{
int ind,val;
}h[NMAX+10];
int k,n,cnt,poz[NMAX+10];
ifstream f("heapuri.in");
ofstream g("heapuri.out");
void up(int p){
if(p>1&&h[p].val<h[p/2].val){
swap(h[p],h[p/2]);
swap(poz[h[p/2].ind],poz[h[p].ind]);
up(p/2);
}
}
void down(int p){
if(2*p<=k){
int x=p;
if(h[2*p].val<h[x].val)
x=2*p;
if(2*p+1<=k&&h[2*p+1].val<h[x].val)
x=2*p+1;
if(x!=p){
swap(h[p],h[x]);
swap(poz[h[p].ind],poz[h[x].ind]);
down(x);
}
}
}
int main()
{
f>>n;
k=cnt=0;
for(int i=1;i<=n;i++){
int op;
f>>op;
if(op==3)
g<<h[1].val<<'\n';
else
if(op==1){
f>>h[++k].val;
cnt++;
h[k].ind=cnt;
poz[cnt]=k;
up(k);
}else{
int x;
f>>x;
h[poz[x]]=h[k];
poz[h[k].ind]=poz[x];
k--;
up(poz[x]);
down(poz[x]);
}
}
return 0;
}