Cod sursa(job #2867868)

Utilizator dianannnDiana Novac dianannn Data 10 martie 2022 16:40:24
Problema Heapuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.6 kb
#include <bits/stdc++.h>

using namespace std;
#define nmax 200010
ifstream f ("heapuri.in");
ofstream g ("heapuri.out");
int n,l,nr;
int a[nmax],heap[nmax],pos[nmax];
void push(int x)
     {
         int aux;
         while (x/2&&a[heap[x]]<a[heap[x/2]])
                {
                  aux=heap[x];
                  heap[x]=heap[x/2];
                  heap[x/2]=aux;
                  pos[heap[x]]=x;
                  pos[heap[x/2]]=x/2;
                  x=x/2;
                }
     }
void pop(int x)
    {
        int aux,y=0;
        while (x!=y)
        {
            y=x;
            if (y*2<=l&&a[heap[x]]>a[heap[y*2]])
                x=y*2;
            if (y*2+1<=l&&a[heap[x]]>a[heap[y*2+1]])
                x=y*2+1;
            aux=heap[x];
            heap[x]=heap[y];
            heap[y]=aux;
            pos[heap[x]]=x;
            pos[heap[y]]=y;
        }
    }
int main()
{
    int i,x,cod;
    f>>n;
    for (i=1;i<=n;i++)
        {
          f>>cod;
          if (cod<3)
              f>>x;
          if (cod==1)
                {
                   l++;
                   nr++;
                   a[nr]=x;
                   heap[l]=nr;
                   pos[nr]=l;
                   push(l);
                }
          if(cod==2)
            {
              a[x]=-1;
              push(pos[x]);
              pos[heap[1]]=0;
              heap[1]=heap[l--];
              pos[heap[1]]=1;
              if (l>1)
                  pop(1);
            }
         if (cod==3)
             g<<a[heap[1]]<<'\n';
        }
    return 0;
}