Pagini recente » Cod sursa (job #935795) | Cod sursa (job #256761) | Cod sursa (job #455947) | Cod sursa (job #882865) | Cod sursa (job #631951)
Cod sursa(job #631951)
#include <fstream>
#include <iostream>
#define N 200010
using namespace std;
std::ifstream in ("heapuri.in");
std::ofstream out ("heapuri.out");
int h[2*N],a[N],b[N],n,m,i,k,nh,z,j;
void up (int k) {
if (k>1)
if (a[h[k/2]]>a[h[k]]) {
b[h[k]]=k/2; b[h[k/2]]=k;
z=h[k]; h[k]=h[k/2]; h[k/2]=z;
up (k/2);
}
}
void down (int k) {
if (2*k>nh) return;
i=k;
if (a[h[k]]>a[h[2*k]]) i=2*k;
if (2*k+1<=nh) if (a[h[i]]>a[h[2*k+1]]) i=2*k+1;
if (i!=k) {
b[h[k]]=i; b[h[i]]=k;
z=h[k]; h[k]=h[i]; h[i]=z;
down (i);
}
}
int main () {
in>>m;
while (m--) {
in>>i;
if (i==1) {
in>>a[++n];
b[n]=++nh;
h[nh]=n;
up (nh);
}
else if (i==2) {
in>>k;
a[k]=2000000000;
down (b[k]);
nh--;
}
else out<<a[h[1]]<<"\n";
}
return 0;
}