Pagini recente » Cod sursa (job #249891) | Cod sursa (job #1054931) | Cod sursa (job #1337468) | Cod sursa (job #1871676) | Cod sursa (job #1956936)
#include <cstdio>
#include <algorithm>
#define NMAX 200000+5
#define f first
#define s second
using namespace std;
int N;
pair<int,int> v[NMAX];
int a[NMAX];
void HeapUp(int);
void HeapDown(int,int);
void HeapUp(int j)
{
if(j==1)
return;
else if(v[j]<v[j/2])
{
swap(v[j],v[j/2]);
HeapUp(j/2);
}
}
void HeapDown(int f,int k)
{
int st,dr,i;
if(2*f<=k)
{
st=v[2*f].f;
if(2*f+1<=k)
dr=v[2*f+1].f;
else dr=st+1;
if(st<dr)
i=2*f;
else i=2*f+1;
if(v[f]>v[i])
{
swap(v[f],v[i]);
HeapDown(i,k);
}
}
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d",&N);
int k=0;
int ct=0;
for(int i=1; i<=N; i++)
{
int t;
scanf("%d",&t);
if(t==1)
{
int x;
scanf("%d",&x);
k++;
ct++;
v[k]={x,ct};
a[ct]=k;
HeapUp(k);
}
else if(t==2)
{
int x;
scanf("%d",&x);
int p=a[x];
swap(v[p],v[k]);
k--;
HeapDown(p,k);
}
else if(t==3)
printf("%d",v[1]);
}
return 0;
}