Pagini recente » Cod sursa (job #1889134) | Cod sursa (job #1401160) | Cod sursa (job #3274004) | Cod sursa (job #1029873) | Cod sursa (job #1894813)
#include <fstream>
#define MAX_N 200005
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int A[MAX_N], Pos[MAX_N], H[MAX_N];
int N, Nh;
void ins(int k)
{
int i = N;
while(i/2 && H[i/2] > H[i])
{
swap(H[i], H[i/2]);
swap(A[i], A[i/2]);
Pos[A[i]] = i;
Pos[A[i/2]] = i/2;
i /= 2;
}
}
void stergere(int i)
{
swap(H[i], H[N]);
swap(A[i], A[N]);
Pos[A[i]] = i;
Pos[A[N]] = N;
N--;
while(1)
{
int j = 2*i;
if(j > N) break;
if(H[j+1] < H[j] && (j+1) <= N) ++j;
if(H[j] > H[i]) break;
swap(H[j], H[i]);
swap(A[j], A[i]);
Pos[A[i]] = i;
Pos[A[j]] = j;
i = j;
}
}
int main()
{int m,i,op,x;
fin>>m;
for(i=1;i<=m;++i)
{ fin>>op;
if(op==1)
{ fin>>x;
A[++N]=++Nh;
Pos[Nh]=Nh;
H[N]=x;
ins(x);
}
if(op==2)
{ fin>>x;
stergere(Pos[x]);
}
if(op==3)
fout<<H[1]<<"\n";
}
return 0;
}