Pagini recente » Cod sursa (job #2313042) | Cod sursa (job #219006) | Cod sursa (job #3198286) | Cod sursa (job #538791) | Cod sursa (job #1744377)
#include <iostream>
#include <fstream>
using namespace std;
int heap[200001],n,a[200001],nr;
void HeapUp(int v)
{
int aux,k=heap[v];
while(v>0 && k<heap[v/2])
{
aux=heap[v];
heap[v]=heap[v/2];
heap[v/2]=aux;
v=v/2;
}
heap[v]=k;
}
void HeapDown(int v)
{
int w=v*2,aux;
while(w<nr)
{
if(w+1<nr && heap[w+1]<heap[w])
{
w++;
}
if(heap[v]<=heap[w])
{
return;
}
aux=heap[v];
heap[v]=heap[w];
heap[w]=aux;
v=w;
w=w*2;
}
}
int cauta(int k)
{
int i;
for(i=0;i<nr;i++)
{
if(heap[i]==k)
{
return i;
}
}
}
int main()
{
int i,t,x,r,j;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
f>>n;
for(i=1;i<=n;i++)
{
f>>t;
if(t==1)
{
f>>x;
a[nr]=x;
heap[nr]=x;
HeapUp(nr);
nr++;
}
if(t==2)
{
f>>x;
r=cauta(a[x-1]);
heap[r]=heap[--nr];
if(r>0 && heap[r]<heap[r/2])
{
HeapUp(r);
}
else
{
HeapDown(r);
}
}
if(t==3)
{
g<<heap[0]<<"\n";
}
}
return 0;
}