Cod sursa(job #1812181)

Utilizator mdiannnaMarusic Diana mdiannna Data 21 noiembrie 2016 21:29:00
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.44 kb
#include <iostream>
#include <queue>
#include <vector>
#include <stdio.h>

int n;
int A[200000];

using namespace std;

void print_queue(priority_queue<int, vector<int>, greater<int> > q){
    while(!q.empty()){
        cout << q.top() << " ";
        q.pop();
    }
    cout << "\n";
}

void decapitare_heap(priority_queue<int, vector<int>, greater<int> > *q){
    (*q).pop();
}


void inserare_heap(int i, priority_queue<int, vector<int>, greater<int> > *q){
    (*q).push(i);
}


void sterge_elem(int pos, priority_queue<int, vector<int>, greater<int> > *q){
    queue<int> q2;
    int k = A[pos];

    while((*q).top() != k){
        q2.push((*q).top());
        (*q).pop();
    }
    (*q).pop();
    while(!q2.empty()){
        (*q).push(q2.front());
        q2.pop();
    }

}

void print_min(priority_queue<int, vector<int>, greater<int> > q){
    cout << q.top();
}


int main(){
    freopen("heapuri.in", "r", stdin);
    freopen("heapuri.out", "w", stdout);

    int k = 0;
    int op;
    int it = 0;

    priority_queue<int, vector<int>, greater<int> > q;

    cin >> n;
    for(int i=0; i<n; i++){
        cin >> op;
        if(op == 3)
            print_min(q);
        else
            cin >> k;

        if(op == 1){
            A[it+1] = k;
            it++;
            inserare_heap(k, &q);
        }

        if(op == 2)
            sterge_elem(k, &q);

    }
    //print_queue(q);
    //decapitare_heap(&q);

   // sterge_elem(4, &q);



    return 0;
}