Cod sursa(job #1239767)

Utilizator victor_crivatCrivat Victor victor_crivat Data 9 octombrie 2014 19:25:36
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
using namespace std;
 int a,b,h[10000000],i,j,k,ord[10000000],fake[10000000],nr,m;
 long n;
ifstream f("heapuri.in");
ofstream g("heapuri.out");

void swap(int i,int j)
{int aux;

    aux=h[i];
    h[i]=h[j];
    h[j]=aux;
    fake[ord[i]]=j;
    fake[ord[j]]=i;
      aux=ord[i];
    ord[i]=ord[j];
    ord[j]=aux;


}
void heapup(int poz)
{int i;
    i=poz/2;
    if (h[poz]<h[i])
    {swap(poz,i);
     heapup(i);
    }
}
void heapdown(int i,int k)
{int poz;
    if (2*i>k) return;
if (2*i+1<=k)
{if (h[2*i+1]>h[2*i]) poz=2*i+1;
    else poz=2*i;
}
else poz=2*i;
if (h[i]>h[poz])
{swap(i,poz);
heapdown(poz,k);}
}
int main()
{f>>n;
for (i=1;i<=n;i++)
    {f>>a;
    if(a!=3) f>>b;
    if (a==1) {k++;
                 h[k]=b;
                 nr++;
                 ord[nr]=k;
                 fake[b]=nr;

                 heapup(k);
                }
    if(a==2){m=fake[b];
        swap(fake[b],k);
         k--;

            heapdown(m,k);
            }
    if (a==3) g<<h[1]<<'\n';

    }

}