Pagini recente » Cod sursa (job #2270368) | Cod sursa (job #2687174) | Cod sursa (job #2699229) | Cod sursa (job #2827842) | Cod sursa (job #344855)
Cod sursa(job #344855)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
#define T i>>1
#define L i<<1
#define R (i<<1)+1
vector<int > v(200001);
vector<int > poz(200001);
int nr_v, nr_poz;
inline void downheap(int i)
{
int min=i;
if (L <= nr_v)
if (v[L] < v[min])
min=L;
if (R <= nr_v)
if (v[R] < v[min])
min=R;
if (min != i)
{
swap (v[i], v[min]);
swap (poz[i], poz[min]);
downheap(min);
}
}
inline void upheap(int i)
{
if (i == 1)
return;
if (v[i] < v[T])
{
swap(v[i], v[T]);
swap(poz[i], poz[T]);
upheap(T);
return;
}
}
void solve()
{
fstream f("heapuri.in", ios::in);
fstream g("heapuri.out", ios::out);
int n;
int a,b;
f>>n;
for (int i=1; i<=n; ++i)
{
f>>a;
if (a == 1)
{
f>>b;
v[++nr_v]=b;
poz[++nr_poz]=nr_v;
}
if (a == 2)
{
f>>b;
swap(v[poz[b]], v[poz[nr_poz]]);
--nr_v;
swap(poz[b], poz[nr_v]);
}
if (a == 3)
{
for (int j=(nr_v>>2); j>=1; --j)
downheap(j);
g<<v[1]<<"\n";
}
}
f.close();
g.close();
}
int main()
{
solve();
return 0;
}