Pagini recente » Cod sursa (job #3175202) | Cod sursa (job #1709236) | Cod sursa (job #1876055) | Cod sursa (job #342610) | Cod sursa (job #1052304)
#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
#define M 200010
int ord[M], poz[M], v[M], nr, tip, x;
void urca (int n, int pozi)
{
while(pozi>1 && v[poz[pozi]]<v[poz[pozi/2]])
{
swap(v[pozi], v[pozi/2]);
swap(ord[pozi], ord[pozi/2]);
pozi=pozi/2;
}
}
void coboara(int n, int pozi)
{
int son;
do
{
son=0;
if(2*pozi<=n)
{
son=2*pozi;
if(2*pozi+1<=n && v[poz[2*pozi+1]]<v[poz[2*pozi]])
son=2*pozi+1;
if(v[son]>=v[pozi])
son=0;
}
if(son)
{
swap(v[pozi], v[son]);
swap(ord[pozi], ord[son]);
pozi=son;
}
}while(son);
}
int main()
{
int i, n=0, j, ok, k=0;
f>>nr;
for(i=1;i<=nr;i++)
{
f>>tip;
if(tip==1)
{
f>>x;
n++;
k++;
v[n]=x;
poz[n]=n;
ord[n]=k;
urca(n, n);
}
if(tip==2)
{
f>>x;
ok=0;
j=1;
while(j<=k && ok==0)
{
if(ord[j]==x)
ok=1;
j++;
}
j--;
v[j]=v[n];
ord[j]=ord[n];
n--;
urca(n, j);
coboara(n, j);
}
if(tip==3)
g<<v[poz[1]]<<'\n';
}
}