Cod sursa(job #3129537)

Utilizator raluca_rRadu Raluca raluca_r Data 14 mai 2023 21:23:41
Problema Heapuri Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.83 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
long long l = 1;
void inserts(vector<pair<long long, long long> >& v, long long x){
    v.push_back({x, l});
    l++;
    unsigned long long 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<long long, long long> >& v, long long x){
    long long e = -1;
    for(long long i = 0; i < v.size(); i++)
        if(v[i].second == x){
            e = i;
            break;
        }
    if(e == -1)
        return;
    long long 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 (long long i = e; i < v.size();) {
        long long 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;
    }
}

long long minim(const vector<pair<long long, long long> > v){
    long long mini = v[0].first;
    for(long long 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");
    long long n,a,x;
    vector< pair<long long,long long> > v;
    fin>>n;
    for(long long i=0; i<n; i++){
        fin>>a;
        if(a==1){
            fin>>x;
            inserts(v,x);
        }
        else if(a==2){
            fin>>x;
            deletes(v,x);
        }
        else if(a==3){
            fout<<minim(v)<<endl;
        }
    }
    fin.close();
    fout.close();
    return 0;
}