Pagini recente » Monitorul de evaluare | Cod sursa (job #904089) | Cod sursa (job #830244) | Cod sursa (job #172501) | Cod sursa (job #3305232)
#include <fstream>
#define NMAX 200002
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int N,H,v[NMAX],heap[NMAX],sters[NMAX];
void urcare(int poz)
{
while(poz/2>=1 && v[heap[poz]]<v[heap[poz/2]])
{
swap(heap[poz],heap[poz/2]);
poz=poz/2;
}
}
void coborare(int poz)
{
while(2*poz<=H)
{
int r=2*poz;
if(r+1<=H && v[heap[r+1]]<v[heap[r]])
{
r++;
}
if(v[heap[poz]]>v[heap[r]])
{
swap(heap[poz],heap[r]);
poz=r;
}
else
{
break;
}
}
}
void eliminare_minim()
{
heap[1]=heap[H];
H--;
coborare(1);
}
int main()
{
fin>>N;
int ind,tip,x;
ind=0;
for(int i=1; i<=N; i++)
{
fin>>tip;
if(tip==1)
{
fin>>v[++ind];
heap[++H]=ind;
urcare(H);
}
if(tip==2)
{
fin>>x;
sters[x]=1;
}
if(tip==3)
{
while(H && sters[heap[1]])
{
eliminare_minim();
}
fout<< v[heap[1]] << "\n";
}
}
return 0;
}