Cod sursa(job #1183108)

Utilizator BLz0rDospra Cristian BLz0r Data 8 mai 2014 15:19:08
Problema Heapuri Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#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;
}