Pagini recente » Cod sursa (job #551717) | Cod sursa (job #399565) | Cod sursa (job #2410994) | Cod sursa (job #2524000) | Cod sursa (job #2724734)
#include <bits/stdc++.h>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
struct elem
{
int val;
int nrOrd;
}v[200005];
int poz[200005], q, n, ops;
void Up(int k)
{
while(k > 1 && v[k].val < v[k / 2].val)
{
swap(poz[v[k].nrOrd], poz[v[k / 2].nrOrd]);
swap(v[k], v[k / 2]);
k /= 2;
}
}
void Down(int k)
{
while(2 * k <= n)
{
int newK = 2 * k;
if(newK + 1 <= n && v[newK].val > v[newK + 1].val)
newK++;
if(v[k].val > v[newK].val)
{
swap(poz[v[k].nrOrd], poz[v[newK].nrOrd]);
swap(v[k], v[newK]);
k = newK;
}
else
return ;
}
}
int main()
{
f >> q;
for(; q; q--)
{
int task;
f >> task;
if(task == 1)
{
int x;
f >> x;
v[++n] = {x, ++ops};
poz[ops] = n;
Up(n);
}
if(task == 2)
{
int x;
f >> x;
v[poz[x]] = v[n], n--;
poz[v[n].nrOrd] = poz[x];
Down(poz[x]);
}
if(task == 3)
{
g << v[1].val << "\n";
}
}
return 0;
}