Pagini recente » Cod sursa (job #2659138) | Cod sursa (job #2638983) | Cod sursa (job #2819801) | Cod sursa (job #580441) | Cod sursa (job #855741)
Cod sursa(job #855741)
#include <fstream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int H[1000000],n,poz[1000000],poz2[1000000],nr;
void swap(int a,int b)
{
int r;
r=H[a];
H[a]=H[b];
H[b]=r;
poz2[H[a]]=b;
poz2[H[b]]=a;
}
void HeapUp(int k)
{
if (k<=1) return;
if (H[k]>H[(k)/2])
{ swap(k,(k)/2);
HeapUp((k)/2);
}
}
void HeapDown(int k,int l)
{
int st,dr,i;
if (2*k<=l) {
st=H[2*k];
if (2*k+1<=l) dr=H[2*k+1];
else dr=st-1;
if (st>dr) i=2*k; else i=2*k+1;
if (H[k]<H[i]) {
swap(k,i);
HeapDown(i,l);
}
}
}
void HeapSort(int k)
{
while (k>=1)
{
swap(1,k);
k--;
HeapDown(1,k);
}
}
int main()
{
int p,i,OP,x;
f>>n;
for (i=1;i<=n;i++){
f>>OP;
if (OP==1) { f>>x; H[++nr]=x; poz[nr]=i; poz2[x]=nr; if(i!=1) HeapUp(i); }
else if (OP==2) {
f>>x;
p=poz[poz2[x]];
H[p]=H[nr];
nr--;
HeapDown(1,nr); }
else if (OP==3) {
HeapSort(nr);
g<<H[1]<<' ';
}
}
/*for (i=1;i<=nr;i++)
g<<H[i]<<' ';*/
return 0;
}