Cod sursa(job #1051116)

Utilizator alexsuciuAlex Suciu alexsuciu Data 9 decembrie 2013 18:41:17
Problema Heapuri Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <iostream>
#include<fstream>
#include<algorithm>

using namespace std;

ifstream f("heapuri.in");
ofstream g("heapuri.out");

struct heapy
{
    long val,poz,ord;
}heap[2000005];
long nr,k;
long i,x,tip;

void urca(long &n,long pozi)
{
    while(pozi>1&& heap[pozi].val<heap[pozi/2].val)
    {
        swap(heap[pozi],heap[pozi/2]);
        pozi/=2;

    }
}

void coboara(long &n,long pozi)
{
 {
    long poz1=0;

    while(pozi!=poz1) {
        poz1=pozi;

        if(2*poz1<=n && heap[pozi].val>heap[2*pozi].val)
            pozi=2*poz1;
        if(2*poz1+1<=n && heap[pozi].val>heap[2*poz1+1].val)
            pozi=2*poz1+1;

        swap(heap[pozi],heap[poz1]);
        }
}}

int main()
{long n=0,j,y;
    f>>nr;
    for(i=1;i<=nr;i++)
    {
        f>>tip;
        if(tip==1)
        {k++;
        f>>x;
        heap[++n].val=x;
        heap[n].ord=k;
        heap[n].poz=n;
        urca(n,n);
        }
        else if(tip==2)
        {
            f>>x;
            for(j=1;heap[j].ord!=x;j++);
            heap[j].val=heap[n].val;
            heap[j].ord=heap[n].ord;
            y=heap[j].poz;
            urca(n,y);
            coboara(n,1);
        }
        else
        {
            g<<heap[1].val<<'\n';
        }
    }
    return 0;
}