Pagini recente » Cod sursa (job #1990020) | Cod sursa (job #1584760) | Cod sursa (job #270071) | Cod sursa (job #1757853) | Cod sursa (job #2891458)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream in("heapuri.in");
ofstream out("heapuri.out");
int n, cerinta;
struct element
{
int info;
int index;
}x;
vector <element>v;
void inserare_Heap(element x)
{
v.push_back(x);
int k=v.size()-1;
while(k>1)
{
if(v[k].info<=v[k/2].info)
{
x=v[k];
v[k]=v[k/2];
v[k/2]=x;
k=k/2;
}
else
return;
}
}
void eliminare_Heap(int ind)
{
int poz=-1;
for(int i=1; i<=n; i++)
{
if(v[i].index==ind)
{
poz=i;
//out<<i<<" "<<v[i].info<<endl;
break;
}
}
if(poz!=-1)
{
element aux;
int k=v.size()-1;
v[poz]=v[k];
v.pop_back();
while(poz>1 && v[poz].info<=v[poz/2].info)
{
aux=v[poz];
v[poz]=v[poz/2];
v[poz/2]=aux;
poz=poz/2;
}
while(poz<k && 2*poz<=k && v[poz].info>=v[2*poz].info)
{
int j=2*poz;
if(j+1<=k && v[j+1].info>v[j].info)
j++;
aux=v[poz];
v[poz]=v[2*poz];
v[2*poz]=aux;
poz=2*poz;
}
}
}
int main()
{
in>>n;
int cnt=1;
v.push_back(x);
for(int i=1; i<=n; i++)
{
in>>cerinta;
if(cerinta==1)
{
in>>x.info;
x.index=cnt;
cnt++;
inserare_Heap(x);
}
else if(cerinta==2)
{
int ind;
in>>ind;
eliminare_Heap(ind);
}
else
out<<v[1].info<<endl;
}
return 0;
}