Cod sursa(job #1333972)

Utilizator Alex_dudeDudescu Alexandru Alex_dude Data 3 februarie 2015 19:45:45
Problema Heapuri Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#include <cstdio>
#define nmax 100
using namespace std;
FILE *f1=fopen("heapuri.in","r"),*f2=fopen("heapuri.out","w");

int H[nmax],ordine[nmax];
int n;
// === Inserare in Heap ===
void inserareInHeap(int i,int n)
{
    int v=H[i],tata=i,fiu=2*i;
    while(fiu<=n)
    {
        if(fiu<n)
            if(H[fiu]>H[fiu+1])fiu++;

        if(v>H[fiu])
        {
            H[tata]=H[fiu];
            tata=fiu;
            fiu=fiu*2;
        }
        else
        fiu=n+1;
    }
    H[tata]=v;
}

int nr;
int main()
{
    fscanf(f1,"%d",&nr);
    for(int i=1;i<=nr;i++)
    {
        int optiune;
        fscanf(f1,"%d",&optiune);

        if(optiune==1)
        {
            // === Insereaza ===
            int x;
            fscanf(f1,"%d",&x);
            H[++n]=x;
            for(int k=n/2;k;k--)
            inserareInHeap(k,n);
            ordine[n]=x;
        }
        else if(optiune==2)
        {
            // === Sterge ===
            int x;
            fscanf(f1,"%d",&x);
            int j;
            for(j=1;j<=n;j++)
                if(H[j]==ordine[x])break;
            H[j]=H[n--];
            inserareInHeap(j,n);
        }
        else
        {
            // === Afiseaza minimul ===
            fprintf(f2,"%d\n",H[1]);
        }
    }
    fclose(f1);
    fclose(f2);
    return 0;
}

//Our greatest weakness lies in giving up. The most certain way to succeed is always to try just one more time.