Pagini recente » Cod sursa (job #619017) | Cod sursa (job #2239754) | Cod sursa (job #2716823) | Cod sursa (job #2383277) | Cod sursa (job #613587)
Cod sursa(job #613587)
#include <fstream>
using namespace std;
int a[200005],n,i,x,inst,r;
void swap(int x, int y)
{
int aux;
aux=a[x];a[x]=a[y];a[y]=aux;
}
void heapup(int k)
{
int t;
if (k>1) {
t=k/2;
if (a[k]>a[t]) {
swap(k,t);
heapup(t);
}
}
}
void heapdw(int r, int k)
{
int st,dr,i;
if (r*2<=k)
{
st=a[r*2];
if (r*2+1<=k) dr=a[r*2+1]; else dr=st-1;
if (st>dr) i=2*r; else i=2*r+1;
if (a[i]>a[r])
{
swap(i,r);
heapdw(i,k);
}
}
}
void heapsort(int k)
{
while (k>1) {
swap(1,k);--k;
heapdw(1,k);
}
}
int main()
{
ifstream f("heapuri.in");
ofstream g("heapuri.out");
f>>n;
x=0;
for (i=1;i<=n;i++) {
f>>inst;
if (inst==1) {x++;f>>a[x];}
//else if (inst==2)//
else if (inst==3) {
for (i=1;i<=x;i++)
heapup(i);
heapsort(x);
g<<a[1]<<'\n';
}
}
f.close();
g.close();
return 0;
}