Pagini recente » Cod sursa (job #1614265) | Cod sursa (job #1406415) | Cod sursa (job #1447255) | Cod sursa (job #782748) | Cod sursa (job #3120877)
#include <fstream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int v[200005];
int el[200005];
int m, n = 0;
int ind = 0;
int promote(int x)
{
int heap = 0;
while(x > 1 && !heap)
{
if(v[x] >= v[x/2])
{
heap = 1;
return x;
}
else
{
swap(v[x], v[x/2]);
x /= 2;
}
}
}
void sift(int x)
{
int heap = 0;
int p;
while(2*x <= n && !heap)
{
p = 2 * x;
if(p+1 <= n && v[p] > v[p+1])
{
p++;
}
if(v[x] <= v[p])
{
heap = 1;
}
else
{
swap(v[x], v[p]);
x = p;
}
}
}
int main()
{
f>>m;
int x, c;
while(m--)
{
f>>c;
if(c == 1)
{
f>>x;
n++;
v[n] = x;
ind++;
el[ind] = x;
promote(n);
}
else if(c == 2)
{
f>>x;
int r;
for(int i = 1; i<=n ;i++)
{
if(v[i] == el[x])
{
r = i;
break;
}
}
swap(v[r], v[n]);
n--;
r = promote(r);
sift(r);
}
else
{
g<<v[1]<<'\n';
}
}
return 0;
}