Cod sursa(job #2893609)

Utilizator Nicolae11Mihaila Nicolae Nicolae11 Data 26 aprilie 2022 13:30:19
Problema Heapuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int n,v[200005],noduri,heap[200005],poz[200005],op,x,l,nr;
void push(int ind)
{   int aux;
	while (ind/2!=0 && v[heap[ind]]<v[heap[ind/2]])
	{   aux=heap[ind];
		heap[ind]=heap[ind/2];
		heap[ind/2]=aux;
        poz[heap[ind]]=ind;
		poz[heap[ind/2]]=ind/2;
		ind=ind/2;
	}
}
void pop(int ind)
{   int aux,y=0;
	while(ind!=y)
	{   y=ind;
		if(y*2<=l && v[heap[ind]]>v[heap[y*2]])
            ind=y*2;
		if(y*2+1<=l && v[heap[ind]]>v[heap[y*2+1]])
            ind=y*2+1;
		aux=heap[ind];
		heap[ind]=heap[y];
		heap[y]=aux;
		poz[heap[ind]]=ind;
		poz[heap[y]]=y;
	}
}
int main()
{   f>>n;
    for(int i=1;i<=n;i++)
    {   f>>op;
        if(op==1)
        {   f>>x;
            l++;
            nr++;
            v[nr]=x;
            heap[l]=nr;
            poz[nr]=l;
            push(l);
        }
        if(op==2)
        {   f>>x;
            v[x]=-1;
			push(poz[x]);
			poz[heap[1]]=0;
			heap[1]=heap[l--];
			poz[heap[1]]=1;
			if(l>1)
                pop(1);
        }
        if(op==3)
            g<<v[heap[1]]<<'\n';
    }
    return 0;
}