Pagini recente » Cod sursa (job #2028643) | Cod sursa (job #2693104) | Cod sursa (job #1583525) | Cod sursa (job #2057218) | Cod sursa (job #1189503)
#include<iostream>
#include<stdio.h>
#define MAX 200008
using namespace std;
int Heap[MAX],Pos[MAX],Ord[MAX],n,nrord;
void push(int x)
{
n++;
int poz=n;
Heap[poz]=x;
nrord++;
Pos[nrord]=poz;
Ord[n]=nrord;
while(poz/2>0 && Heap[poz]<Heap[poz/2])
{
swap(Heap[poz],Heap[poz/2]);
swap(Pos[Ord[poz]],Pos[Ord[poz/2]]);
swap(Ord[poz],Ord[poz/2]);
poz=poz/2;
}
}
void pop(int x)
{
int i,poz,fiu;
poz=Pos[x];
Heap[poz]=Heap[n];
n--;
do
{
fiu=0;
if(2*poz<=n && Heap[2*poz]<Heap[poz])
fiu=2*poz;
if(2*poz+1<=n && Heap[2*poz+1]<Heap[2*poz])
fiu=2*poz+1;
if(Heap[fiu]>=Heap[poz])
fiu=0;
if(fiu)
{
swap(Heap[fiu],Heap[poz]);
swap(Pos[Ord[fiu]],Pos[Ord[poz]]);
swap(Ord[fiu],Ord[poz]);
poz=fiu;
}
}while(fiu);
}
int main()
{
FILE *f,*g;
int nrop,i,op,tp;
f=fopen("heapuri.in","r");
g=fopen("heapuri.out","w");
fscanf(f,"%d",&nrop);
for(i=0;i<nrop;i++)
{
fscanf(f,"%d",&op);
if(op==1)
{
fscanf(f,"%d",&tp);
push(tp);
}
if(op==2)
{
fscanf(f,"%d",&tp);
pop(tp);
}
if(op==3)
fprintf(g,"%d\n",Heap[1]);
}
fclose(f);
fclose(g);
return 0;
}