Pagini recente » Cod sursa (job #469854) | Cod sursa (job #1186756) | Cod sursa (job #1677071) | Cod sursa (job #368387) | Cod sursa (job #360120)
Cod sursa(job #360120)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
#define T i/2
#define L 2*i
#define R 2*i+1
int H[200005];
int nh;
int TimeV[200005];
void upheap(int i)
{
if (H[i] < H[T])
{
swap(TimeV[i], TimeV[T]);
swap(H[i], H[T]);
upheap(T);
}
};
void downheap(int i)
{
int min=i;
if (L <= nh)
if (H[L] < H[min])
min=L;
if (R <= nh)
if (H[R] < H[min])
min=R;
if (min!=i)
{
swap(TimeV[i], TimeV[min]);
swap(H[i], H[min]);
downheap(min);
}
};
void solve(const char * buff_file)
{
fstream f(buff_file, ios::in);
fstream g("heapuri.out", ios::out);
int n;
f>>n;
int dec, value;
int nr=0;
for (int i=1; i<=n; ++i)
{
f>>dec;
if ( dec == 1)
{
nr++;
f>>value;
H[++nh]=value;
TimeV[nr]=nh;
upheap(nh);
}
if ( dec == 2 )
{
f>>value;
for (int i=1; i<=nr; ++i)
if (TimeV[i]==value)
{
swap(H[i], H[nh--]);
downheap(i);
break;
}
}
if ( dec == 3)
g<<H[1]<<" ";
}
f.close();
g.close();
}
int main()
{
solve("heapuri.in");
return 0;
}