Pagini recente » Cod sursa (job #2942900) | Borderou de evaluare (job #2105087) | Cod sursa (job #2206186) | Cod sursa (job #2714394) | Cod sursa (job #3174907)
#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define ld long double
#define chad char
#define mod 1000000007
#define dim 100005
#define lim 1000000
#define mdim 1501
#define mult 2e9
#define maxx 200002
#define simaimult 1e17
#define FOR(i,a,b) for(int i=(a); i<=(b); i++)
#define pli pair<ll,int>
#define pil pair<int,ll>
#define piii pair<int,pair<int,int> >
#define pii pair<int,int>
#define pll pair<ll,ll>
#define pb push_back
#define mp make_pair
#define nr_biti __builtin_popcount
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int h[2*dim],n,pos,q;
int ind[2*dim]; // pe ce pozitie in heap se afla al i-lea element intrat
void inserare(int x)
{
int son=n+1;
int daddy=son/2;
while(daddy>0 && h[daddy]>x)
{
h[son]=h[daddy];
//ind[son]=daddy;
ind[daddy]=son;
son=daddy;
daddy=son/2;
}
h[son]=x;
ind[n+1]=son;
++n;
}
void combi(int pos)
{
int son=2*pos,daddy=pos,x=h[pos];
while(son<=n)
{
if(son+1<=n && h[son+1]<h[son])
son++;
if(h[son]<x)
{
h[daddy]=h[son];
ind[son]=daddy;
daddy=son;
son=2*daddy;
}
else
break;
}
}
void create_combi()
{
for(int i=n/2; i>=1; i--)
combi(i);
}
int minim()
{
int aux=h[1];
h[1]=h[n];
--n;
combi(1);
return aux;
}
int main()
{
ios_base::sync_with_stdio(false);
fin.tie(nullptr);
fout.tie(nullptr);
fin >> q;
while(q--)
{
int tip;
fin >> tip;
if(tip==1)
{
int x;
fin >> x;
inserare(x);
}
else if(tip==2)
{
int x;
fin >> x;
/*
for(int i=1; i<=n; i++)
cout << ind[i] << " ";
break;*/
h[ind[x]]=h[n];
n--;
combi(ind[x]);
}
else
{
fout << h[1] << "\n";
}
}
return 0;
}