Cod sursa(job #1004761)

Utilizator oprea1si2si3Oprea Sebastian oprea1si2si3 Data 3 octombrie 2013 17:06:30
Problema Heapuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include<fstream>
using namespace std;
ifstream in("heapuri.in");
ofstream out("heapuri.out");
int heap[200200],val[200200],poz[200200],nr,lungime;

void up(int nod) {

    while(nod/2 && val[heap[nod]]<val[heap[nod/2]]) {

        swap(heap[nod],heap[nod/2]);
        poz[heap[nod]]=nod;
        poz[heap[nod/2]]=nod/2;
        nod=nod/2;

        }

}
void down(int nod)
{
    int k=0;

    while(nod!=k) {
        k=nod;

        if(2*k<=lungime && val[heap[nod]]>val[heap[2*k]])
            nod=2*k;
        if(2*k+1<=lungime && val[heap[nod]]>val[heap[2*k+1]])
            nod=2*k+1;

        swap(heap[nod],heap[k]);
        poz[heap[nod]]=nod;
        poz[heap[k]]=k;

        }
}
int main() {

    int n, i, x, y;
    in>>n;

    for(i=1;i<=n;i++) {

        in>>x;
        if(x==1) {

            in>>y;
            nr++;
            lungime++;
            val[nr]=y;
            heap[lungime]=nr;
            poz[nr]=lungime;

            up(lungime);

            }
        if(x==2) {

            in>>y;
            val[y]=-1;
            up(poz[y]);
            poz[heap[1]]=0;
            heap[1]=heap[lungime--];
            poz[heap[1]]=1;

            down(1);

            }
        if(x==3)
            out<<val[heap[1]]<<'\n';
        }

    in.close();
    out.close();
    return 0;
        }