Cod sursa(job #2892631)

Utilizator mirceaspPetcu Mircea mirceasp Data 22 aprilie 2022 21:54:57
Problema Heapuri Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.12 kb
#include <iostream>
#include <fstream>
#include <iterator>
#include <vector>
using namespace std;
vector<long long > heap;
vector<long long > ordine;
void urca(long  long pozitie)
{

    while (pozitie != 0)
    {
        if(heap[(pozitie-1)/2]>heap[pozitie]) {
            long long aux;
            aux= heap[(pozitie-1)/2];
            heap[(pozitie-1)/2]= heap[pozitie];
            heap[pozitie] = aux;
            pozitie = (pozitie-1)/2;}
        else
            break;
    }
}
void coboara(long long cautat)
{
    long long pozitie;
    for (pozitie = 0; pozitie< heap.size(); ++pozitie)
        if(heap[pozitie] == cautat)
            break;
    while (pozitie*2+1 < heap.size())
    {
        if(pozitie*2+2<heap.size()) {
            if (heap[pozitie * 2 + 1] < heap[pozitie * 2 + 2]) {
                swap(heap[pozitie],heap[pozitie*2+1]);
                pozitie = pozitie * 2 + 1;

            } else
            {
                long long aux;
                aux = heap[pozitie * 2 + 2];
                heap[pozitie * 2 + 2] = heap[pozitie];
                heap[pozitie] = aux;
                pozitie = pozitie * 2 + 2;
            }

        } else {
            long long aux;
            aux = heap[pozitie * 2 + 1];
            heap[pozitie * 2 + 1] = heap[pozitie];
            heap[pozitie] = aux;
            pozitie = pozitie * 2 + 1;
        }

    }
    if(pozitie+1<heap.size())
        swap(heap[pozitie+1],heap[pozitie]);

}
int main() {
    ifstream f("heapuri.in");
    ofstream g("heapuri.out");
    long long n,i,op,nr;
    f>>n;
    long long poz = 0;
    for(i = 0;i<n;i++)
    {
        f>>op;
        if(op != 3) {
            f >> nr;
            if(op == 1)
            {
                ordine.push_back(nr);
                heap.push_back(nr);
                urca(poz);
                poz++;
            } else if (op == 2)
            {
                coboara(ordine[nr-1]);
                heap.pop_back();
                poz--;

            }
        } else
            g<<heap[0]<<'\n';
    }
    f.close();g.close();
    return 0;
}