Cod sursa(job #2511491)

Utilizator TUdOr73Minciunescu Tudor TUdOr73 Data 19 decembrie 2019 09:40:00
Problema Heapuri Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.76 kb
#include <iostream>
#include <fstream>
using namespace std;
int nr_elemente = 0,min_heap[200000],pozitie[10000000];
void inserare(int x){
    nr_elemente++;
    min_heap[nr_elemente] = x;
    pozitie[nr_elemente] = x;
    int i = nr_elemente;
    while(i!=1 && min_heap[i]<min_heap[i/2]){
        int aux = min_heap[i];min_heap[i] = min_heap[i/2];
        min_heap[i/2] = aux;
        i = i/2;
    }

}
int minim(int x,int y){
    if(x < y)
        return x;
    return y;
}
void stergere(int x){
    int t;
    for(int i =1;i<=nr_elemente;i++)
    if(min_heap[i] == pozitie[x])
        t = i;
    if(t == nr_elemente){
        nr_elemente--;
    }
    else{
       int aux = min_heap[t];
       min_heap[t] = min_heap[nr_elemente];
       min_heap[nr_elemente] = aux;
        nr_elemente--;int nr;
    while(2*t<=nr_elemente&&min_heap[t] > minim(min_heap[2*t],min_heap[2*t+1])
         ) {
           if(min_heap[2*t] <min_heap[2*t+1])
                nr = 2*t;
           else if(min_heap[2*t+1]<min_heap[2*t]&&2*t+1>nr_elemente)
               {
                   if(min_heap[2*t]<min_heap[t])
                        nr = 2*t;
                  else break;
               }
            else nr = 2*t+1;
            int aux = min_heap[t];
            min_heap[t] = min_heap[nr];
            min_heap[nr] = aux;
            t = nr;
        }
    }
}
int main()
{  int n;
    ifstream f("heapuri.in");
    ofstream g("heapuri.out");
    f>>n;
    int x,y;
    for(int k =1;k<= n;k++){
        f >> x;
        if(x == 3)
            g << min_heap[1]<<endl;
        else {
            f >> y;
            if(x == 1)
                inserare(y);
            if(x == 2)
                stergere(y);
        }
    }
    return 0;
}