Cod sursa(job #1894813)

Utilizator Garen456Paun Tudor Garen456 Data 27 februarie 2017 16:06:55
Problema Heapuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>
#define MAX_N 200005
 using namespace std;
 ifstream fin("heapuri.in");
 ofstream fout("heapuri.out");
int A[MAX_N], Pos[MAX_N], H[MAX_N];
int N, Nh;


void ins(int k)
{
    int i = N;
    while(i/2 && H[i/2] > H[i])
    {
        swap(H[i], H[i/2]);
        swap(A[i], A[i/2]);
        Pos[A[i]] = i;
        Pos[A[i/2]] = i/2;
        i /= 2;
    }

}

void stergere(int i)
{
    swap(H[i], H[N]);
    swap(A[i], A[N]);
    Pos[A[i]] = i;
    Pos[A[N]] = N;
    N--;

    while(1)
    {
        int j = 2*i;
        if(j > N) break;
        if(H[j+1] < H[j] && (j+1) <= N) ++j;
        if(H[j] > H[i]) break;

        swap(H[j], H[i]);
        swap(A[j], A[i]);

        Pos[A[i]] = i;
        Pos[A[j]] = j;
        i = j;
    }
}
int main()
{int m,i,op,x;
    fin>>m;
    for(i=1;i<=m;++i)
    { fin>>op;
       if(op==1)
       { fin>>x;
           A[++N]=++Nh;
           Pos[Nh]=Nh;
           H[N]=x;
           ins(x);

       }
     if(op==2)
     { fin>>x;
         stergere(Pos[x]);
     }
     if(op==3)
        fout<<H[1]<<"\n";

    }
    return 0;
}