Cod sursa(job #1744375)

Utilizator adimiclaus15Miclaus Adrian Stefan adimiclaus15 Data 19 august 2016 17:53:56
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.44 kb
#include <iostream>
#include <fstream>
using namespace std;
int heap[200001],n,a[200001],nr;
void HeapUp(int v)
{
    int aux,k=heap[v];
    while(v>0 && k<heap[v/2])
    {
        aux=heap[v];
        heap[v]=heap[v/2];
        heap[v/2]=aux;
        v=v/2;
    }
    heap[v]=k;
}
void HeapDown(int v)
{
    int w=v*2,aux;
    while(w<=nr)
    {
        if(w+1<=nr && heap[w+1]<heap[w])
        {
            w++;
        }
        if(heap[v]<=heap[w])
        {
            return;
        }
        aux=heap[v];
        heap[v]=heap[w];
        heap[w]=aux;
        v=w;
        w=w*2;
    }
}
int cauta(int k)
{
    int i;
    for(i=1;i<=nr;i++)
    {
        if(heap[i]==k)
        {
            return i;
        }
    }
}
int main()
{
    int i,t,x,r;
    ifstream f("heapuri.in");
    ofstream g("heapuri.out");
    f>>n;
    for(i=1;i<=n;i++)
    {
        f>>t;
        if(t==1)
        {
            f>>x;
            nr++;
            a[nr]=x;
            heap[nr]=x;
            HeapUp(nr);
        }
        if(t==2)
        {
            f>>x;
            r=cauta(a[x]);
            heap[r]=heap[nr--];
            if(r>0 && heap[r]<heap[r/2])
            {
                HeapUp(r);
            }
            else
            {
                HeapDown(r);
            }
        }
        if(t==3)
        {
            g<<heap[1]<<" ";
        }
    }
    return 0;
}