Pagini recente » Cod sursa (job #3249090) | Cod sursa (job #1538365) | Cod sursa (job #2394719) | Cod sursa (job #1531801) | Cod sursa (job #708063)
Cod sursa(job #708063)
#include<fstream>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int v[200001],poz[200001],heap[200001],i,aux,nr,n;
inline void downheap(int x)
{int fiu;
while (x <= nr)
{ fiu = x;
if ((x << 1) <= nr)
{ fiu = x << 1;
if (fiu + 1 <= nr && v[heap[fiu+1]] < v[heap[fiu]])
++fiu;
}
else
break;
if (v[heap[x]] < v[heap[fiu]])
{ heap[fiu] = heap[fiu] + heap[x] - (heap[x] = heap[fiu]);
poz[heap[fiu]] = fiu;
poz[heap[x]] = x;
x = fiu;
}
else
break;
}
}
inline void upheap(int x)
{int tata;
while (x > 1)
{ tata = x >> 1;
if (v[heap[tata]] > v[heap[x]])
{ heap[x] = heap[x] + heap[tata] - (heap[tata] = heap[x]);
poz[heap[tata]] = tata;
poz[heap[x]] = x;
x = tata;
}
else
x = 1;
}
}
int main()
{ fin >> n;
for (i=1;i<=n;++i)
{ fin >> aux;
if (aux == 1)
{ fin >> v[++nr];
poz[nr] = nr;
heap[nr] = nr;
upheap(nr);
}
else
if (aux == 3)
fout << v[heap[1]] << '\n';
else
{ fin >> aux;
downheap(poz[aux]);
}
}
return 0;
}