Pagini recente » Cod sursa (job #2365319) | Cod sursa (job #632451) | Cod sursa (job #1441052) | Cod sursa (job #1168671) | Cod sursa (job #1066960)
//
// main.cpp
// heapuri+
//
// Created by Catalina Brinza on 12/25/13.
// Copyright (c) 2013 Catalina Brinza. All rights reserved.
//
#include <fstream>
#include <vector>
using namespace std;
ifstream f("heapuri.in");
ofstream out("heapuri.out");
int main()
{vector <int> a,v;
int n,i,ji,x,y,in,aux,m;
f>>m;
a.push_back(0);
v.push_back(0);
for (i=0;i<m;++i)
{
f>>x;
if (x==1)
{
f>>y;
a.push_back(y);
v.push_back(y);
in=a.size()-1;
while (in>1 && a[in]<a[in/2])
{
swap(a[in],a[in/2]);
in=in/2;
}
}
else if (x==3) out<<a[1]<<"\n";
else
{
f>>y;
for (ji=1;ji<a.size();++ji)
if (a[ji]==v[y]) break;
a[ji]=a[a.size()-1];
a.pop_back();
n=a.size()-1;
if (ji*2+1<=n)
while (ji*2+1<=n)
{
if (a[ji]>a[ji*2] && a[ji*2]<a[ji*2+1])
{
swap(a[ji],a[ji*2]);
ji=ji*2;
}
else if (a[ji]>a[ji*2+1] && a[ji*2+1]<=a[ji*2])
{
swap(a[ji],a[ji*2+1]);
ji=ji*2+1;
}
else break;
if (ji==n) break;
}
else if (ji*2==n && a[ji]>a[ji*2])
swap(a[ji],a[ji*2]);
}
}
f.close();
out.close();
return 0;
}