Cod sursa(job #2494519)

Utilizator MihneaGhiraMihnea MihneaGhira Data 17 noiembrie 2019 23:16:41
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.26 kb
#include<fstream>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int n,T,nr,tip,x,auxiliar,parinte,copil;
int heap[200005],v[200005],pozitii[200005];
int main(){
    fin>>T;
    for(int i=1;i<=T;i++){
        fin>>tip;
        if(tip==1){
            fin>>x;
            heap[++n]=x;
            v[++nr]=n;
            pozitii[n]=copil=nr;parinte=copil/2;

            while(parinte>0){
                if(heap[v[copil]]<heap[v[parinte]]){
                    auxiliar=v[copil];
                    v[copil]=v[parinte];
                    v[parinte]=auxiliar;
                    pozitii[v[copil]]=copil;
                    pozitii[v[parinte]]=parinte;
                }
                else{
                    break;
                }

                copil=parinte;
                parinte=parinte/2;
            }
        }
        ///
        if(tip==2){
            fin>>x;
            heap[x]=-1;

            copil=pozitii[x];
            parinte=copil/2;
            while(parinte!=0){
                if(heap[v[copil]]<heap[v[parinte]]){
                    auxiliar=v[copil];
                    v[copil]=v[parinte];
                    v[parinte]=auxiliar;
                    pozitii[v[copil]]=copil;
                    pozitii[v[parinte]]=parinte;
                }
                else{
                    break;
                }
                copil=parinte;
                parinte=parinte/2;
            }

            v[1]=v[nr--];
            pozitii[v[1]]=1;
            parinte=1;
            copil=2;
            while(copil<=nr){
                if(copil+1<=nr&&heap[v[copil+1]]<heap[v[copil]])
                    copil++;
                if(heap[v[parinte]]>heap[v[copil]]){
                    auxiliar=v[parinte];
                    v[parinte]=v[copil];
                    v[copil]=auxiliar;
                    pozitii[v[copil]]=copil;
                    pozitii[v[parinte]]=parinte;
                }
                else{
                    break;
                }
                parinte=copil;
                copil=2*parinte;
            }
        }
        ///
        if(tip==3){
            fout<<heap[v[1]]<<"\n";
        }
    }
    return 0;
}