Pagini recente » Cod sursa (job #2682184) | Cod sursa (job #1152250) | Cod sursa (job #1507575) | Cod sursa (job #1759581) | Cod sursa (job #3163343)
#include <fstream>
using namespace std;
const int NMAX = 200002;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
pair < int, int > heap[4 * NMAX];
int f[NMAX];
int hsize = 0;
void up(int val)
{
while(val > 1)
{
if(heap[val].first < heap[val / 2].first)
{
swap(f[heap[val].second], f[heap[val / 2].second]);
swap(heap[val].first, heap[val / 2].first);
swap(heap[val].second, heap[val / 2].second);
val /= 2;
}
else
break;
}
}
void down(int val)
{
while(val * 2 <= hsize)
{
int x = val * 2;
if(x < hsize && heap[x].first > heap[x + 1].first)
x++;
if(heap[val].first > heap[x].first)
{
swap(f[heap[val].second], f[heap[x].second]);
swap(heap[val].first, heap[x].first);
swap(heap[val].second, heap[x].second);
val = x;
}
else
break;
}
}
int main()
{
int n, ok, a, poz = 0;
fin >> n;
while(n--)
{
fin >> ok;
if(ok == 1) ///inserez
{
fin >> a;
poz++;
heap[++hsize].first = a;
heap[hsize].second = poz;
f[poz] = hsize;
up(hsize);
}
else if(ok == 2) ///sterg
{
fin >> a;
int val = f[a];
swap(f[heap[val].second], f[heap[hsize].second]);
swap(heap[val].first, heap[hsize].first); ///le dam swap
swap(heap[val].second, heap[hsize].second);
f[heap[hsize].second] = 0;
heap[hsize].first = 0;
heap[hsize].second = 0;
hsize--;
//cout << "heapuri --> " << heap[1].first << " " << heap[2].first << " " << heap[3].first << '\n';
//cout << "size --> " << hsize << '\n';
if (val <= hsize) {
down(val);
up(val);
}
}
else
fout << heap[1].first << '\n';
}
return 0;
}