Pagini recente » Cod sursa (job #2212393) | Cod sursa (job #2266705) | Cod sursa (job #1052651) | Cod sursa (job #544621) | Cod sursa (job #3129537)
#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;
}