Cod sursa(job #1805869)

Utilizator roxanastRoxana Stiuca roxanast Data 14 noiembrie 2016 16:08:04
Problema Heapuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#define NMAX 200000
using namespace std;
struct heap{
int ind,val;
}h[NMAX+10];
int k,n,cnt,poz[NMAX+10];
ifstream f("heapuri.in");
ofstream g("heapuri.out");

void up(int p){
    if(p>1&&h[p].val<h[p/2].val){
        swap(h[p],h[p/2]);
        swap(poz[h[p/2].ind],poz[h[p].ind]);
        up(p/2);
    }
}
void down(int p){
    if(2*p<=k){
        int x=p;
        if(h[2*p].val<h[x].val)
            x=2*p;
        if(2*p+1<=k&&h[2*p+1].val<h[x].val)
            x=2*p+1;
        if(x!=p){
            swap(h[p],h[x]);
            swap(poz[h[p].ind],poz[h[x].ind]);
            down(x);
        }

    }

}
int main()
{
    f>>n;
    k=cnt=0;
    for(int i=1;i<=n;i++){
        int op;
        f>>op;
        if(op==3)
            g<<h[1].val<<'\n';
        else
        if(op==1){
            f>>h[++k].val;
            cnt++;
            h[k].ind=cnt;
            poz[cnt]=k;
            up(k);
        }else{
            int x;
            f>>x;
            h[poz[x]]=h[k];
            poz[h[k].ind]=poz[x];
            k--;
            up(poz[x]);
            down(poz[x]);
        }

    }
    return 0;
}