Pagini recente » Cod sursa (job #974654) | Cod sursa (job #2038524) | Cod sursa (job #825083) | Cod sursa (job #2139741) | Cod sursa (job #1888872)
#include <fstream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int a[200005],n,l,v,i,t,x,m;
int hp[200010], poz[200010];
void Raise(int x) {
while (x/2 >= 1 && a[hp[x]] < a[hp[x/2]]) {
swap(hp[x],hp[x/2]);
poz[hp[x]] = x;
poz[hp[x/2]] = x/2;
x /= 2;
}
}
void Lower(int x) {
int y = 0;
while (x !=y) {
y = x;
if (2*y+1 <= l && a[hp[2*y+1]]<a[hp[y]])
x = 2*y+1;
if (2*y <= l && a[hp[2*y]]<a[hp[y]])
x = 2*y;
poz[hp[y]] = x;
poz[hp[x]] = y;
swap(hp[x],hp[y]);
}
}
void add(int x) {
a[++n] = x; l++;
hp[l] = n;
poz[n] = l;
Raise(l);
}
void rem(int x) {
if (poz[x]) {
a[x] = -1;
Raise(poz[x]);
}
else return;
poz[x] = 0;
hp[1] = hp[l];
poz[hp[l]] = 1;
hp[l] = 0;
l--;
Lower(1);
}
int main() {
f >> m;
while (m--) {
f >> t;
if (t == 3) {
g << a[hp[1]] << '\n';
}
else {
f >> x;
if (t==1)
add(x);
else rem(x);
}
}
return 0;
}