Pagini recente » Cod sursa (job #270209) | Cod sursa (job #2735107) | Cod sursa (job #347755) | Cod sursa (job #2315621) | Cod sursa (job #1183108)
#include <cstdio>
#include <algorithm>
using namespace std;
FILE *f=fopen ("heapuri.in","r");
FILE *g=fopen ("heapuri.out","w");
struct heap{
int val;
int poz;
}v[200005];
int r,ord;
void redo(int poz){
if (poz<1 || v[poz].val>v[poz/2].val) return;
if (v[poz/2].val>v[poz].val){
swap (v[poz/2],v[poz]);
}
redo(poz/2);
}
void del (int poz){
if (poz>r) return;
if (v[2*poz].val<v[2*poz+1].val){
swap(v[poz],v[2*poz]);
del(2*poz);
}
else{
swap(v[poz],v[2*poz+1]);
del(2*poz+1);
}
}
int main(){
int n,x;
fscanf (f,"%d",&n);
for (int i=1;i<=n;++i){
fscanf (f,"%d",&x);
if (x==1){
ord++;
fscanf (f,"%d",&x);
v[++r].val=x;
v[r].poz=ord;
redo(r);
continue;
}
if (x==2){
int val;
fscanf (f,"%d",&val);
for (int i=1;i<=r;++i){
if (v[i].poz==val){
del(i);
}
}
r--;
continue;
}
if (x==3){
fprintf (g,"%d\n",v[1].val);
}
}
return 0;
}