Pagini recente » Cod sursa (job #1876774) | Cod sursa (job #219808) | Statistici Damian Robert (DamianRobert) | Cod sursa (job #2102979) | Cod sursa (job #2483584)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
const int Maxx = 2e5+5;
int v[Maxx], poz[Maxx], pozh[Maxx], k;
void Up(int nr)
{
int fiu=k;
int tata=fiu/2;
while(tata && nr < v[tata])
{
pozh[v[tata]]=fiu;
v[fiu]=v[tata];
fiu=tata;
tata=fiu/2;
}
v[fiu]=nr;
pozh[v[fiu]]=fiu;
}
void Down(int n)
{
int i=n;
while(2*i <= k && v[i]>min(v[2*i], v[2*i+1]))
{
if(2*i+1 > k)
{
if(v[i] > v[2*i])
{
swap(v[i], v[2*i]);
swap( pozh[v[i]] , pozh[v[2*i]] );
}
i*=2;
}
else
{
if(v[2*i] < v[2*i+1])
{
if(v[2*i] < v[i])
{
swap(v[2*i], v[i]);
swap( pozh[v[i]] , pozh[v[2*i]] );
}
i*=2;
}
else
{
if(v[2*i+1] < v[i])
{
swap(v[2*i+1], v[i]);
swap( pozh[v[i]] , pozh[v[2*i+1]] );
}
i*=2;
i++;
}
}
}
}
int main()
{
int x, nr, n;
fin>>n;
while(n)
{
fin>>x;
if(x==1)
{
fin>>nr;
k++;
poz[k]=nr;
pozh[nr]=k;
Up(nr);
}
else
if(x==2)
{
fin>>nr;
v[pozh[poz[nr]]]=v[k--];
Down(pozh[poz[nr]]);
}
else
{
fout<<v[1]<<"\n";
}
n--;
}
return 0;
}