Pagini recente » Cod sursa (job #950411) | Cod sursa (job #1043361) | Cod sursa (job #17001) | Cod sursa (job #2379943) | Cod sursa (job #2586932)
#include <bits/stdc++.h>
#define NMAX 200005
using namespace std;
ifstream fin("heapuri.in") ;
ofstream fout("heapuri.out") ;
int n, op, x, k, m;
int v[NMAX], a[NMAX] ;
void adauga(int k)
{
while(v[k] < v[k/2])
{
swap(v[k] , v[k/2]) ;
k = k / 2 ;
}
}
int Find(int x)
{
for(int i=1; i<=k; i++)
if(v[i] == x)
return i ;
}
void sterge(int node)
{
while(2*node <= k && 2*node+1 <= k)
{
if(v[2*node] < v[2*node+1])
{
swap(v[node] , v[2*node]) ;
node = 2*node ;
}
else
{
swap(v[node] , v[2*node+1]) ;
node = 2*node + 1 ;
}
}
swap(v[node] , v[k]) ;
adauga(node) ;
}
int main()
{
fin >> n ;
for(int i=1; i<=n; i++)
{
fin >> op ;
if(op == 1 || op == 2)
{
fin >> x ;
if(op == 1)
{
v[++k] = x ;
a[++m] = x ;
adauga(k) ;
}
else
{
int node = Find(a[x]) ;
sterge(node) ;
k -- ;
}
}
else
fout << v[1] << "\n" ;
}
return 0;
}