Cod sursa(job #1735130)

Utilizator alexmisto342Turdean Alexandru alexmisto342 Data 29 iulie 2016 02:18:25
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.86 kb
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
#include <stdlib.h>
#include <stack>
#include <queue>
#include <iomanip>
#include <time.h>
#define inf 1<<30
//#define x first
#define y second
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int i,j,n,m,a,b,c,st,dr,v[200005],in[200005],nr,ok;
void add(int val)
{
    int i;
    nr++;
    v[nr] = val;
    i = nr;
    while(i != 1)
    {
        if(v[i/2] > v[i])
        {
            swap(v[i/2],v[i]);
            i/=2;
        }
        else
            i = 1;
    }
}
void sterge(int nod)
{
    if(nod!=nr)
    {
        swap(v[nod],v[nr]);
        nr--;
        while(nod != 1)
        {
            if(v[nod/2] > v[nod])
            {
                swap(v[nod/2],v[nod]);
                nod/=2;
            }
            else
                nod = 1;
        }
        while(nod*2+1 <= nr)
        {
            if(v[nod*2] < v[nod])
            {
                swap(v[nod*2],v[nod]);
                nod*=2;
            }
            else
            if(v[nod*2+1] < v[nod])
            {
                swap(v[nod*2+1],v[nod]);
                nod= nod*2+1;
            }
            else
            {
                break;
            }
        }
        if(v[nod*2] < v[nod] && nod*2<= nr)
        {
            swap(v[nod*2],v[nod]);
            nod*=2;
        }
}
    else
        nr--;
}
int main()
{
    fin >> n;int x;
    for(i = 1; i <= n; i++)
    {
        fin >> m;
        if(m == 1)
        {
            fin >> x;
            add(x);
            j++;
            in[j] = nr;
        }
        if(m == 2)
        {
            ok=0;
            fin >> x;
            sterge(in[x]);

        }
        if(m == 3)
            fout<<v[1]<<"\n";
    }
return 0;
}