Pagini recente » Cod sursa (job #2404630) | Cod sursa (job #2120258) | Cod sursa (job #960820) | Cod sursa (job #2910526) | Cod sursa (job #2293739)
//#include <bits/stdc++.h>
#include <fstream>
#include <vector>
#include <bitset>
#include <unordered_map>
#include <algorithm>
#include <queue>
#include <math.h>
#include <iomanip>
#include <stack>
#include <string.h>
#include <set>
using namespace std;
ifstream in("heapuri.in");
ofstream out("heapuri.out");
#define F first
#define S second
const int INF = 0x3f3f3f3f;
const int DIM = 2e5 + 17;
pair <int, int> v[DIM];
int nr, p[DIM];
void up(int nod)
{
if(nod >= 1)
{
if(v[nod].S < v[nod / 2].S)
{
swap(v[nod], v[nod / 2]);
p[v[nod].F] = nod;
p[v[nod / 2].F] = nod / 2;
up(nod / 2);
}
}
}
void down(int nod)
{
if(nod * 2 + 1 <= nr && (v[nod].S > v[nod * 2].S || v[nod].S > v[nod * 2 + 1].S))
{
if(v[nod * 2].S < v[nod * 2 + 1].S)
{
swap(v[nod], v[nod * 2]);
p[v[nod].F] = nod;
p[v[nod * 2].F] = nod * 2;
down(nod * 2);
}
else
{
swap(v[nod], v[nod * 2 + 1]);
p[v[nod].F] = nod;
p[v[nod * 2 + 1].F] = nod * 2 + 1;
down(nod * 2 + 1);
}
}
else
if(nod * 2 <= nr && v[nod].S > v[nod * 2].S)
{
swap(v[nod], v[nod * 2]);
p[v[nod].F] = nod;
p[v[nod * 2].F] = nod * 2;
down(nod * 2);
}
}
main()
{
int n;
in >> n;
for(int i = 1; i <= n; i++)
{
int op;
in >> op;
if(op == 1)
{
int x;
in >> x;
nr++;
v[nr].S = x;
v[nr].F = nr;
p[v[nr].F] = nr;
up(nr);
}
else
if(op == 2)
{
int poz;
in >> poz;
v[p[poz]].S = INF;
down(p[poz]);
}
else
out << v[1].S << '\n';
}
}