Pagini recente » Cod sursa (job #2427690) | Cod sursa (job #416281) | Cod sursa (job #1083942) | Cod sursa (job #1872107) | Cod sursa (job #2895927)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
void heapify(vector <int> &v, int index, int n)
{
int minim = index;
int st = 2 * index + 1;
int dr = st + 1;
if (st < n && v[st] < v[minim])
minim = st;
if (dr < n && v[dr] < v[minim])
minim = dr;
if (minim != index)
{
int aux;
aux = v[index];
v[index] = v[minim];
v[minim] = aux;
heapify(v, minim, n);
}
}
void inserare_heap(vector <int> &v, int x)
{
v.push_back(x);
int n = v.size();
if(n > 1)
{
for(int i = n / 2 - 1; i >= 0; i--)
heapify(v, i, n);
}
}
void stergere_heap(vector <int> &v, int numar)
{
int n = v.size();
int i;
for(i = 0; i < n; i++)
{
if(numar == v[i])
break;
}
int aux;
aux = v[n-1];
v[n-1] = v[i];
v[i] = aux;
n--;
v.pop_back();
for(i = n / 2 - 1; i >= 0; i--)
heapify(v, i, n);
}
int main()
{
int n, i, instr, x;
f >> n;
vector <int> v;
vector <int> ord;
for(i = 0; i < n; i++)
{
f >> instr;
if(instr == 1)
{
f >> x;
ord.push_back(x);
inserare_heap(v, x);
}
if(instr == 2)
{
f >> x;
x--;
stergere_heap(v, ord[x]);
}
if(instr == 3)
g << v[0] << "\n";
}
return 0;
}