Cod sursa(job #2911898)

Utilizator AlexSerban21Serban Alexandru AlexSerban21 Data 4 iulie 2022 13:38:49
Problema Heapuri Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <fstream>
using namespace std;
ifstream fin ("heapuri.in");
ofstream fout ("heapuri.out");
int n,m,i,c,p,j,x,nr,poz[200005],pozitia[200005],pozpoz,v[200005];
int main()
{
    fin>>m;
    n=0;
    for (j=1; j<=m; j++)
    {
        fin>>c;
        if (c==1)
        {
            fin>>x;
            n++;
            nr++;
            v[n]=x;
            poz[n]=nr;
            pozitia[nr]=n;
            i=n;
            while (i>1&&v[i]<v[i/2])
            {
                swap (v[i],v[i/2]);
                swap (pozitia[poz[i]],pozitia[poz[i/2]]);
                swap (poz[i],poz[i/2]);
                i=i/2;
            }
        }
        else if (c==3)
            fout<<v[1]<<"\n";
        else if (c==2)
        {
            fin>>x;
            pozpoz=pozitia[x];
            v[pozpoz]=v[n];
            n--;
            p=pozpoz;
            nr=p*2;
            while (nr<=n)
            {
                if (nr+1<=n&&v[nr+1]<v[nr])
                    nr++;
                if (v[p]>v[nr])
                    swap (v[p],v[nr]);
                else
                    break;
                p=nr;
                nr=nr*2;
            }
        }
    }
    return 0;
}