Pagini recente » Cod sursa (job #117169) | Cod sursa (job #2976252) | Cod sursa (job #526265) | Cod sursa (job #2664988) | Cod sursa (job #631957)
Cod sursa(job #631957)
#include <fstream>
#define N 200010
using namespace std;
std::ifstream in ("heapuri.in");
std::ofstream out ("heapuri.out");
int h[N<<1],a[N],b[N],n,m,i,k,nh,z;
void up (int k) {
if (k>1)
if (a[h[k>>1]]>a[h[k]]) {
b[h[k]]=k>>1; b[h[k>>1]]=k;
z=h[k]; h[k]=h[k>>1]; h[k>>1]=z;
up (k>>1);
}
}
void down (int k) {
if (2*k>nh) return;
i=k;
if (a[h[k]]>a[h[k<<1]]) i=k<<1;
if ((k<<1)+1<=nh) if (a[h[i]]>a[h[(k<<1)+1]]) i=(k<<1)+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;
}