Cod sursa(job #3129530)

Utilizator raluca_rRadu Raluca raluca_r Data 14 mai 2023 21:02:56
Problema Heapuri Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.7 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

void inserts(vector<pair<int, int> >& v, int x, int i){
    v.push_back({x, i+1});
    unsigned int k = v.size()-1;
    while(k > 0 && v[k/2].first > v[k].first){
        swap(v[k], v[k/2]);
        k = k/2;
    }
}

void deletes(vector<pair<int, int> >& v, int x){
    int e = -1;
    for(int i = 0; i < v.size(); i++)
        if(v[i].second == x){
            e = i;
            break;
        }
    if(e == -1)
        return;
    int last = v.size() - 1;
    swap(v[e], v[last]);
    v.pop_back();
    while (e > 0 && v[e].first < v[(e - 1) / 2].first) {
        swap(v[e], v[(e - 1) / 2]);
        e = (e - 1) / 2;
    }
    for (int i = e; i < v.size();) {
        int j = i;
        if (2 * i + 1 < v.size() && v[2 * i + 1].first < v[j].first) j = 2 * i + 1;
        if (2 * i + 2 < v.size() && v[2 * i + 2].first < v[j].first) j = 2 * i + 2;
        if (i == j) break;
        swap(v[i], v[j]);
        i = j;
    }
}

int minim(const vector<pair<int, int> > v){
    int mini = v[0].first;
    for(int i = 1; i < v.size(); i++){
        if(v[i].first < mini)
            mini = v[i].first;
    }
    return mini;
}

int main() {
    ifstream fin("heapuri.in");
    ofstream fout("heapuri.out");
    int n,a,x;
    vector< pair<int,int> > v;
    fin>>n;
    for(int i=0; i<n; i++){
        fin>>a;
        if(a==1){
            fin>>x;
            inserts(v,x,i);
        }
        else if(a==2){
            fin>>x;
            deletes(v,x);
        }
        else if(a==3){
            fout<<minim(v)<<endl;
        }
    }
    fin.close();
    fout.close();
    return 0;
}