Pagini recente » Cod sursa (job #551340) | Cod sursa (job #194297) | Istoria paginii runda/simularecls10_10 | Profil Vali_Deaconu | Cod sursa (job #2184080)
#include <bits/stdc++.h>
#define NM 200002
using namespace std;
int n, h[NM], m, o[NM];
long long v[NM];
void fixinsert ()
{
int p = 0, k = m;
while((1 << p) < k)
p++;
p--;
while(v[h[k]] < v[h[k - (1 << p)]])
{
o[h[k]] = k - (1 << p);
o[h[k - (1 << p)]] = k;
swap(h[k], h[k - (1 << p)]);
k -= (1 << p);
p--;
}
}
void fixdelete (int k)
{
o[h[m]] = k;
h[k] = h[m];
m--;
int p = 0;
while((1 << p) < k)
p++;
while(k + (1 << p) <= m && v[h[k]] > v[h[k + (1 << p)]])
{
o[h[k]] = k + (1 << p);
o[h[k + (1 << p)]] = k;
swap(h[k], h[k + (1 << p)]);
k += (1 << p);
p++;
}
}
int main()
{
ifstream fin ("heapuri.in");
ofstream fout ("heapuri.out");
fin >> n;
for(int i = 1, k = 0; i <= n; i++)
{
int op;
fin >> op;
if(op == 3)
fout << v[h[1]] << "\n";
else if(op == 1)
{
k++;
fin >> v[k];
m++;
o[k] = m;
h[m] = k;
fixinsert();
}
else if(op == 2)
{
int x;
fin >> x;
fixdelete(o[x]);
}
/*
for(int i = 1; i <= m; i++)
fout << v[h[i]] << " ";
fout << "\n";*/
}
return 0;
}