Cod sursa(job #3243216)
Utilizator | Data | 16 septembrie 2024 16:24:37 | |
---|---|---|---|
Problema | Heapuri | Scor | 10 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.63 kb |
#include <fstream>
using namespace std;
ifstream cin("heapuri.in");
ofstream cout("heapuri.out");
struct nod
{
int val, poz;
};
nod v[200005];
int f[200005];
int main()
{
int q, n=0, p=0, m=0;
cin>>q;
for(int k=1; k<=q; k++)
{
int c;
cin>>c;
if(c==3)
cout<<v[1].val<<'\n';
else
{
if(c==1)
{
//insert
int val;
cin>>val;
v[++n].val=val;
m++;
v[n].poz=m;
int cn=n;
while(cn!=1)
{
if(v[cn].val<v[cn/2].val)
swap(v[cn], v[cn/2]);
cn=cn/2;
}
}
else
{
//erase
int poz;
cin>>poz;
f[poz]++;
if(f[v[1].poz]!=0)
{
swap(v[1], v[n]);
n--;
}
while(f[v[1].poz]!=0)
{
int cn=1;
while(cn<=n)
{
int ram=0;
if(v[cn*2].val>v[cn*2+1].val)
ram=cn*2+1;
else
ram=cn*2;
if(v[cn].val>v[ram].val)
swap(v[cn], v[ram]);
cn=ram;
}
}
}
}
}
return 0;
}